pandas - 带有许多列的 Pandas v 0.25 groupby 会导致内存错误
问题描述
更新到 pandas v0.25.2 后,在大型数据帧上的许多列上执行 groupby 的脚本不再有效。我收到内存错误
MemoryError: Unable to allocate array with shape (some huge number...,) and data type int64
做一些研究,我发现在 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()
运行此代码(在 0.25.2 版上)也会出现内存错误。我做错了什么(pandas v0.25 中的语法是否改变了?),还是返回了这个标记为已解决的问题?
解决方案
用于observed=True
修复它并防止 groupby 扩展因子变量的所有可能组合:
df.groupby(index, observed=True)
有一个相关的GitHub 问题:PERF: groupby with many empty groups memory blastup。
推荐阅读
- javascript - Web 应用程序的屏幕截图
- c# - 监控线程
- reactjs - 不能把这个 div 滚动条放到底部
- c++ - 功能
对于 boost::bind() 返回的任何内容 - c - 打印控制台页面后,如何暂停我的 C 程序?
- python - 通过一系列类访问函数
- c# - C# 从 Google GeoCoding API 获取经纬度
- php - 使用队列(数据库)时没有重叠的laravel调度程序
- php - 这样的问题怎么可能发生:一个整数是非数字的?
- hyperledger-composer - 在 WSL (ubuntu 16.04) 上启动 fabric-composer 时 Docker 容器退出 (1) 错误