熊猫:合并多个.csv文件,并返回汇总了相同名称列的Dataframe

use*_*628 1 python csv concat pandas

我有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
Run Code Online (Sandbox Code Playgroud)

第二个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
Run Code Online (Sandbox Code Playgroud)

结果数据框

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
Run Code Online (Sandbox Code Playgroud)

我尝试执行以下操作以合并csv,但是列未聚合。

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

full_df = pd.concat(csvArray).fillna(0)
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 5

您可以按User列创建索引并按sum一级使用:

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

要么:

csvArray = [pd.read_csv("myCsv{}.csv".format(x), index_col=['User']) for x in range(1,101)]
Run Code Online (Sandbox Code Playgroud)
full_df = pd.concat(csvArray).fillna(0).sum(level=0).reset_index()
Run Code Online (Sandbox Code Playgroud)

在您的解决方案中应按User列汇总:

full_df = pd.concat(csvArray).fillna(0).groupby('User', as_index=False).sum()
Run Code Online (Sandbox Code Playgroud)