我有一个数据帧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
。但这听起来很奇怪,因为生成的数据帧的大小应该是可持续的:20000x600。这种操作需要多少内存?有办法修正这个记忆错误吗?
最佳答案
试着看看这是否符合你的记忆:
df.groupby(['newidx', 'Code'])['val'].max().unstack()
pivot_table
不幸的是内存非常密集,因为它可能会生成多个数据副本。如果
groupby
不起作用,则必须将数据帧分割成更小的部分。尽量不要分配多次。例如,如果从csv读取:df = pd.read_csv('file.csv').groupby(['newidx', 'Code'])['val'].max().unstack()
避免多次分配。