为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

婷婷同学_ 2021-12-09 14:57:57
我有 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)
查看完整描述

2 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-12-09
?
温温酱

TA贡献1752条经验 获得超4个赞

您也可以尝试:


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)


查看完整回答
反对 回复 2021-12-09
  • 2 回答
  • 0 关注
  • 271 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信