2014-12-24 2 views
1

У меня есть набор данных df с тремя колонками: 'String_key_val', 'Float_other_val1', 'Int_other_val2'. Я хочу группировать по key_val, а затем извлекать сумму val1 (соответственно val2) относительно этих групп. Вот мой код:Работа с фрагментированными данными при выполнении операций groupby

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 может хранить простые массивы. Что мне делать?

ответ

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() 
Смежные вопросы