首页 > 解决方案 > 带有许多列的 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 中的语法是否改变了?),还是返回了这个标记为已解决的问题?

标签: pandaspandas-groupby

解决方案


用于observed=True修复它并防止 groupby 扩展因子变量的所有可能组合:

df.groupby(index, observed=True)

有一个相关的GitHub 问题PERF: groupby with many empty groups memory blastup


推荐阅读