我有一个关于熊猫的问题。
我是熊猫的新手,我不明白是什么导致了此错误。我在Internet和stackoverflow上搜索了答案,但找不到任何信息。
from pandas import read_csv, pivot_table
f_csv = read_csv(filepath_or_buffer=file_dir, delimiter=';')
res_pivot = pivot_table(f_csv, index=['nome_ua'], columns=['attivita_descrizione'], values=['produzione_data_inizio', 'produzione_data_fine'], aggfunc=lambda x: x)
res_pivot.to_csv('/tmp/result.csv', sep=';', quotechar='"')
CSV文件具有344行和7列。
我正在使用TurboGears 2.3.5,并且在调用
.to_csv
时,主进程会终止,并显示以下消息:Process finished with exit code 0
。这非常奇怪,所以我对ipython做了同样的事情,却得到了以下消息:
Process finished with exit code 139
。 139似乎意味着“无效的内存访问”(SIGSEGV)。寻找类似错误的解决方案后,我将最后一行更改为:
res_pivot.to_csv('/tmp/result.csv', sep=';', quotechar='"', chunksize=10)
但是结果还是一样。
res_pivot.head()的内容:http://pastebin.com/YKcrkCjf(它确实很大)
res_pivot.columns的内容:
MultiIndex(levels=[[u'produzione_data_inizio', u'produzione_data_fine'], [u'Bovini - Allevamento autoconsumo', u'Bovini - Da riproduzione', u'Bovini - Ingrasso', u'Bovini - Linea vacca vitello', u'Bovini - Produzione latte']],
labels=[[0, 0, 0, 0, 0, 1, 1, 1, 1, 1], [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]],
names=[None, u'attivita_descrizione'])
最后一行http://pastebin.com/N7gX22AQ
使用过的res_pivot.tail()和res_pivot.values [0:] [250:]
我尝试在CSV中仅保留5行,并且一切正常。
你可以帮帮我吗?
谢谢
最佳答案
您的问题在于:aggfunc=lambda x: x
。
这不是一个聚合函数,而只是在获取值时返回它们。 aggfunc
参数应该具有一个函数,该函数用于在index
中给定的columns
和pivot_table
组合给出多个值的情况下进行汇总。因为没有聚合它们,所以最终得到一个包含数组作为元素的数据框。显然,to_csv
对此感到窒息。
要解决此问题,您需要提供一个汇总函数(默认为均值)。由于您没有数字值,因此可能会采用第一个值(aggfunc='first'
将对此起作用,因为“ first”是采用第一个值的功能的公认捷径)。使用它可以正常工作而不会崩溃:
In [10]: res_pivot = pd.pivot_table(f_csv, index=['nome_ua'],
columns=['attivita_descrizione'],
values=['produzione_data_inizio', 'produzione_data_fine'],
aggfunc='first')
In [11]: res_pivot.to_csv('tmp_result.csv', sep=';', quotechar='"')