保存到csv数据透视表获取错误“进程已完成退出代码139”

时间:2015-07-06 11:21:27

标签: python csv pandas

我对熊猫有疑问。 我是熊猫的新手,我无法理解是什么导致了这个错误。我搜索了互联网和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行,一切正常。

你可以帮帮我吗? 感谢

1 个答案:

答案 0 :(得分:1)

你的问题在于:aggfunc=lambda x: x 这是聚合函数,但只是在获取它们时返回值。 aggfunc参数应该是一个函数,用于聚合index中给定columnspivot_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='"')