Есть ли более простой способ объединения результатов description () из нескольких фрагментов DataFrame? - PullRequest
0 голосов
/ 03 марта 2020

Я работаю над большими CSV-файлами. Поскольку я не могу импортировать весь CSV-файл в кадр данных одновременно из-за ограничений памяти, я использую блоки для обработки данных.

df = pd.read_csv(filepath, chunksize = chunksize)
for chunk in df:
    print(chunk['col2'].describe())

Это дает мне статистику для каждого блока. Есть ли способ объединить результаты каждого вызова chunk.describe (), чтобы я мог получить статистику для всех данных одновременно?

Единственный способ, о котором я могу думать сейчас, - это поддерживать словарь для хранения статистики и обновления с каждой итерацией.

1 Ответ

1 голос
/ 03 марта 2020

EDITED :

Я немного поигрался с этим. Я новичок, поэтому возьмите это с крошкой соли:

Загрузка образца с удаленного источника

import pandas as pd

df1_iter = pd.read_csv("https://gist.githubusercontent.com/seankross/a412dfbd88b3db70b74b/raw/5f23f993cd87c283ce766e7ac6b329ee7cc2e1d1/mtcars.csv", 
                       chunksize=5, 
                       iterator=True)

Сделайте простой for поиск, чтобы сделать .describe и .T на каждом чанке и добавьте его в список

Следующее использование pd.concat() на df_list

df_list = []

for chunk in df1_iter:
    df_list.append(chunk.describe().T)

df_concat = pd.concat(df_list)

Groupby
Для agg я использовал функцию, которую я счел полезной Отрегулируйте при необходимости.

desc_df = df_concat.groupby(df_concat.index).agg(
    {
        'mean':'mean', 
        'std': 'std',
        'min': 'min',
        '25%': 'mean', 
        '50%': 'mean', 
        '75%': 'mean', 
        'max': 'max'
    }
)

print(desc_df)
            mean        std     min         25%         50%         75%      max
am      0.433333   0.223607   0.000    0.333333    0.500000    0.500000    1.000
carb    3.100000   1.293135   1.000    2.250000    2.666667    4.083333    8.000
cyl     6.200000   0.636339   4.000    5.500000    6.000000    7.166667    8.000
disp  232.336667  40.954447  71.100  177.216667  195.233333  281.966667  472.000
drat    3.622833   0.161794   2.760    3.340417    3.649167    3.849583    4.930
gear    3.783333   0.239882   3.000    3.541667    3.916667    3.958333    5.000
hp    158.733333  44.053017  52.000  124.416667  139.333333  191.083333  335.000
mpg    19.753333   2.968229  10.400   16.583333   20.950000   23.133333   33.900
qsec   17.747000   0.868257  14.500   16.948333   17.808333   18.248333   22.900
vs      0.450000   0.102315   0.000    0.208333    0.416667    0.625000    1.000
wt      3.266900   0.598493   1.513    2.850417    3.042500    3.809583    5.424

Надеюсь, это было полезно.

...