我的数据框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。
这样的操作需要多少内存?有没有办法解决这个内存错误?
答案 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()