首页 > 解决方案 > 将大型 .bz2 文件加载和聚合到熊猫中的有效方法是什么?

问题描述

我正在尝试以块的形式加载一个大的 bz2 文件并聚合到一个 pandas DataFrame 中,但是 Python 一直在崩溃。我使用的方法如下,我在较小的数据集上取得了成功。将大于内存的文件聚合到 Pandas 中的更有效方法是什么?

数据是行分隔的 json 压缩到 bz2,取自https://files.pushshift.io/reddit/comments/(所有公开的 reddit 评论)。

import pandas as pd
reader = pd.read_json('RC_2017-09.bz2', compression='bz2', lines=True, chunksize=100000) df = pd.DataFrame() for chunk in reader:
    # Count of comments in each subreddit
    count = chunk.groupby('subreddit').size()
    df = pd.concat([df, count], axis=0)
    df = df.groupby(df.index).sum() 
    reader.close()

编辑:当我使用 chunksize 1e5 时,Python 崩溃了。当我将块大小增加到 1e6 时,该脚本起作用了。

标签: pythonpandas

解决方案


我使用了这个迭代器方法,它对我有用,没有内存错误。你可以试试。

chunksize = 10 ** 6
cols=['a','b','c','d']
iter_csv = pd.read_csv(filename.bz2, compression='bz2', delimiter='\t', usecols=cols, low_memory=False, iterator=True, chunksize=chunksize, encoding="utf-8")
# some work related to your group by replacing below code
df = pd.concat([chunk[chunk['b'] == 1012] for chunk in iter_csv])

推荐阅读