Как агрегировать анализ при обработке данных через панды в блоках? - PullRequest
0 голосов
/ 24 октября 2018

Я загружаю файл через панды для обработки в чанках:

import pandas as pd
import numpy as np

f= open("analysis.txt","a+")

chunksize = 10 ** 6
for chunk in pd.read_csv('filename.txt', sep='\t', lineterminator='\r', chunksize=chunksize):
    my_tab = pd.crosstab(index=chunk["Year"], columns=chunk["Indicator"])

my_tab дает данные для столбцов Year и Indicator для текущего чанка.Можно ли агрегировать все эти кадры данных, чтобы после обработки всех данных я мог видеть окончательный анализ всего файла данных?

1 Ответ

0 голосов
/ 24 октября 2018

Простой пример:

import pandas as pd
df = pd.DataFrame({'type':['fruit','vegi','fruit','meat','vegi','meat','fruit'],
                'ori':['us','cn','cn','nz','nz','us','cn'],
               'num':[5,5,9,3,2,10,8],
               'price':[5,5,10,3,3,13,20]})
df1 = df.iloc[0:2]
df2 = df.iloc[2:4]
df3 = df.iloc[4:7] # chunk
a = pd.crosstab(df1['type'], df1['ori'])
b = pd.crosstab(df2['type'], df2['ori'])
c = pd.crosstab(df3['type'], df3['ori']) # crosstab of chunks

используйте уменьшение, чтобы упростить жизнь:

from functools import reduce
reduce(lambda df1, df2:df1.add(df2, fill_value=0) ,[a, b, c])

результат:

ori     cn  nz  us   
type             
fruit   2.0 0.0 1.0  
meat    0.0 1.0 1.0  
vegi    1.0 1.0 0.0  

Это должно быть почти таким же, как:

pd.crosstab(df['type'], df['ori'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...