Pandas dataframe pivot - 内存错误

时间:2016-09-22 21:14:25

标签: python pandas dataframe

我的数据框df具有以下结构:

        val          newidx    Code
Idx                             
0       1.0      1220121127    706
1       1.0      1220121030    706
2       1.0      1620120122    565

它有1000000行。 我们总共有600个唯一Code值和200000个唯一newidx值。

如果我执行以下操作

df.pivot_table(values='val', index='newidx', columns='Code', aggfunc='max')

我得到MemoryError。但这听起来很奇怪,因为结果数据帧的大小应该是可持续的:200000x600。

这样的操作需要多少内存?有没有办法解决这个内存错误?

2 个答案:

答案 0 :(得分:4)

试着看看这是否适合你的记忆:

df.groupby(['newidx', 'Code'])['val'].max().unstack()
遗憾的是,{p> pivot_table非常耗费内存,因为它可能会生成多个数据副本。

如果groupby不起作用,则必须将DataFrame拆分为较小的部分。尽量不要分配多次。例如,如果从csv读取:

df = pd.read_csv('file.csv').groupby(['newidx', 'Code'])['val'].max().unstack()

避免多次分配。

答案 1 :(得分:0)

我最近在4个数据帧之间进行合并时遇到了类似的问题。

对我有用的是在groupby期间禁用索引,然后合并。

如果@Kartiks答案不起作用,请在分组DataFrame之前尝试此操作。

df.groupby(['newidx', 'Code'], as_index=False)['val'].max().unstack()