gpt4 book ai didi

python - 避免大型 Pandas DataFrame 上 GroupBy 的内存问题

转载 作者:太空宇宙 更新时间:2023-11-03 12:26:26 32 4
gpt4 key购买 nike

更新:

pandas df 是这样创建的:

df = pd.read_sql(query, engine)
encoded = pd.get_dummies(df, columns=['account'])

从这个 df 创建一个 dask df 看起来像这样:

df = dd.from_pandas(encoded, 50)

使用 dask 执行操作不会产生可见的进展(使用 dask 诊断进行检查):

result = df.groupby('journal_entry').max().reset_index().compute()

原文:

我有一个 Pandas df,有 270 万行和 4,000 列。除了四列之外,所有列都是 dtype uint8。 uint8 列仅包含 1 或 0 的值。我正在尝试对 df 执行此操作:

result = df.groupby('id').max().reset_index()

不出所料,这个操作会立即返回一个内存错误。我最初的想法是水平和垂直分块 df。但是,这会造成困惑,因为 .max() 需要在所有 uint8 列上执行,而不仅仅是一对列。此外,像这样分块 df 仍然非常慢。我的机器上有 32 GB 的 RAM。

什么策略可以缓解内存问题?

最佳答案

如果您的数据中有任何分类列(而不是存储为对象列或字符串的类别),请确保在 groupby 命令中使用 observed=True 选项。这确保它只创建存在条目的行,例如每个 customer_id、order_id 组合只有一行,而不是创建 n_custs * n_orders 行!

我刚刚对 2600 万行数据集进行了分组求和,从未超过 7GB RAM。在添加 observed=True 选项之前,它会上升到 62GB,然后用完。

关于python - 避免大型 Pandas DataFrame 上 GroupBy 的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50051210/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com