Pandas: объединяет несколько файлов .csv и возвращает Dataframe с агрегированными столбцами с одинаковым именем - PullRequest
1 голос
/ 19 марта 2019

У меня есть 100 CSV-файлов.Каждый файл содержит столбцы, которые могут быть или не быть в других файлах .csv.Мне нужно объединить все файлы CSV в один и суммировать все столбцы, которые имеют одинаковое имя столбца.Ниже приведен пример с двумя CSV-файлами, но представьте, что он может содержать до 100 CSV-файлов:

первый CSV-файл:

 User  col1 col2 col3 col4 col5 ....colX
 A     1    1     1    2    6        5
 B     4    5     6    7    23       6
 C     4    6     1    2     4       4

второй CSVфайл

User  col1 col2 col3 col4 col5 ....colY
 A     1    1     5    3    2       3
 B     20   4     3    9    6       4 
 C     2    1     4    3    4       1

Результат DataFrame

User   col1   col2    col3   col4   col5 ....colX colY
 A     1+1    1+1     1+5    2+3    6+2       5    3
 B     4+20   5+4     6+3    7+9    23+6      6    4
 C     4+2    6+1     1+4    2+3    4+4       4    1

Я попытался сделать следующее, чтобы объединить CSV, но столбцы не агрегируют.

csvArray = []
for x in range(1,101): 
   csvArray.append(pd.read_csv("myCsv"+str(x)+".csv"))

full_df = pd.concat(csvArray).fillna(0)

Ответы [ 2 ]

5 голосов
/ 19 марта 2019

Вы можете создать индекс по столбцу User и использовать sum по первому уровню:

csvArray = []
for x in range(1,101): 
   csvArray.append(pd.read_csv("myCsv{}.csv".format(x), index_col=['User']))

Или:

csvArray = [pd.read_csv("myCsv{}.csv".format(x), index_col=['User']) for x in range(1,101)]

full_df = pd.concat(csvArray).fillna(0).sum(level=0).reset_index()

В вашем решенииследует агрегировать по User столбцу:

full_df = pd.concat(csvArray).fillna(0).groupby('User', as_index=False).sum()
0 голосов
/ 19 марта 2019

Также вы можете попробовать:

data = pd.DataFrame()
for x in range(1, 101):
    df = pd.read_csv('mycsv'+str(x)+'.csv').set_index('User')
    data = data.add(df, fill_value = 0).fillna(0)
...