Pandas:连接多个.csv文件并返回Dataframe,其中聚合了相同名称的列

问题描述 投票:1回答:2

我有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)
python pandas csv concat
2个回答
5
投票

您可以通过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
投票

你也可以尝试:

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)
© www.soinside.com 2019 - 2024. All rights reserved.