mor*_*rty 2 pandas pandas-groupby
更新到 pandas v0.25.2 后,对大型数据帧上的许多列执行 groupby 的脚本不再有效。我收到内存错误
MemoryError: Unable to allocate array with shape (some huge number...,) and data type int64
Run Code Online (Sandbox Code Playgroud)
做了一些研究,我发现早期版本的 Git 报告了问题 (#14942)
import numpy as np
import pandas as pd
df = pd.DataFrame({
'cat': np.random.randint(0, 255, size=3000000),
'int_id': np.random.randint(0, 255, size=3000000),
'other_id': np.random.randint(0, 10000, size=3000000),
'foo': 0
})
df['cat'] = df.cat.astype(str).astype('category')
# killed after 6 minutes of 100% cpu and 90G maximum main memory usage
grouped = df.groupby(['cat', 'int_id', 'other_id']).count()
Run Code Online (Sandbox Code Playgroud)
运行此代码(在 0.25.2 版上)也会出现内存错误。我做错了什么(pandas v0.25 中的语法是否发生了变化?),或者是否返回了这个标记为已解决的问题?
使用observed=True修复它,防止GROUPBY扩大因子变量的所有可能的组合:
df.groupby(index, observed=True)
Run Code Online (Sandbox Code Playgroud)
有一个相关的GitHub 问题:PERF: groupby with many empty groups memory blowup。
| 归档时间: |
|
| 查看次数: |
487 次 |
| 最近记录: |