Среднее и стандартное значение в столбце фрейма данных - PullRequest
1 голос
/ 29 февраля 2020

Для 50 CSV-файлов мне нужно вычислить среднее значение и стандартное отклонение только для одного указанного c столбца. Затем мне нужно создать массив из 50 строк и 2 столбцов, чтобы у меня в каждой строке было стандартное и среднее значения одного из файлов CSV. Я застрял на уровне попытки получить среднее и стандартное значение для первого CSV.

Вот что я получил:

import numpy as np
import pandas as pd
import glob
i=0
path ="C:\\Users\\sharon\\Desktop\\mathematical finance\\sadna"
all_files = glob.glob(path + "/*.csv")
arr = np.zeros((50,2))
for filename in all_files:
    df = pd.read_csv(filename,encoding="utf-8")
    df=df.loc[2:470,'Unnamed: 3']
    Mean=df.mean() #DOES NOT WORK
    Std=df.std(axis=1)  # What?...
    arr[i,:]=(Mean,Std)

edit:

проблема с этим кодом решена:

import numpy as np
import pandas as pd
import glob
path ="C:\\Users\\sharon\\Desktop\\mathematical finance\\sadna"
all_files = glob.glob(path + "/*.csv")
df_list = [(pd.read_csv(f, encoding = "utf-8", header = None,usecols = [3], nrows = 470, ).assign(filename = f)) for f in all_files]
final_df = pd.concat(df_list)
final_df[3]= final_df[3].apply(pd.to_numeric, errors='coerce')
agg_df = final_df.groupby(['filename']).agg(['mean', 'std'])

1 Ответ

4 голосов
/ 29 февраля 2020

Рассмотрите возможность создания одного фрейма данных с использованием списка для всех файлов CSV, которые объединяются вместе с concat. Обязательно используйте необходимые аргументы read_csv. Затем агрегируйте для необходимой статистики. Наконец, преобразуйте значения фрейма данных в массив numpy с помощью to_numpy:

path = "C:\\Users\\sharon\\Desktop\\mathematical finance\\sadna"
all_files = glob.glob(path + "/*.csv")

# SPECIFY NO HEADERS, SPECIFIC COLUMN AND NUMBER OF ROWS
df_list = [(pd.read_csv(f, encoding = "utf-8", 
                        header = None,
                        usecols = [4], 
                        nrows = 469)
              .assign(filename = f)
           ) for f in all_files]

# COMPILE LARGE DATA FRAME
final_df = pd.concat(df_list, ignore_index=True)

# AGGREGATE BY filename
agg_df = final_df.groupby(['filename']).agg(['mean', 'std'])

# CONVERT TO NUMPY ARRAY
arr = agg_df.to_numpy()
...