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

我有 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

结果数据帧


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)


婷婷同学_
浏览 272回答 2
2回答

慕丝7291255

您可以按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()

温温酱

您也可以尝试: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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python