在需要groupby操作时处理分块数据

时间:2014-12-24 09:35:46

标签: python pandas pytables hdfstore

我有一个包含三列的数据集df'String_key_val''Float_other_val1''Int_other_val2'。我想在key_val上进行分组,然后针对这些组提取val1(resp。val2)的总和。这是我的代码:

df = pandas.read_csv('test.csv')
grouped = df.groupby('String_key_val')
series_calculus1 = grouped['Float_other_val1'].sum()
series_calculus2 = grouped['Int_other_val2'].sum()

res = pandas.concat([series_calculus1, series_calculus2], axis=1)
res.to_csv('output_test.csv')

我的问题是:我的入门数据集是10GB而且我有4Go Ram所以我需要将我的微积分分块,但我看不出如何。我想过使用HDFStore,但由于我只需要构建一个数值数据集,我认为没有必要存储完整的DataFrame,我认为HDFStore不能存储简单的数组。 我该怎么办?

1 个答案:

答案 0 :(得分:0)

我相信一个简单的方法就是这样......

import pandas as pd

summary = pd.DataFrame()
chunker = pd.read_csv('test.csv',iterator=True,chunksize=50000)

for chunk in chunker:
    group = chunk.groupby('String_key_val')
    out = group[['Float_other_val1','Int_other_val2']].sum()
    summary = summary.append(out)
    summary = summary.reset_index()
    group = summary.groupby('String_key_val')
    summary = group[['Float_other_val1','Int_other_val2']].sum()