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

Posted

技术标签:

【中文标题】Pandas:连接多个 .csv 文件并返回聚合了同名列的 Dataframe【英文标题】:Pandas: concat multiple .csv files and return Dataframe with columns of the same name aggregated 【发布时间】:2019-08-09 16:00:32 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

@user5844628 - 欢迎您!如果我的回答有帮助,别忘了采纳哦。【参考方案2】:

你也可以试试:

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)

【讨论】:

以上是关于Pandas:连接多个 .csv 文件并返回聚合了同名列的 Dataframe的主要内容,如果未能解决你的问题,请参考以下文章

按创建日期过滤多个 csv 文件并连接成一个 pandas DataFrame

将多个csv文件导入pandas并合并到一个DataFrame中

使用 pandas GroupBy 和时间序列重采样的平均聚合

将多个csv文件导入pandas并拼接成一个DataFrame

如何使用包含引号并使用多个分隔符的 pandas 读取 CSV 文件

如何使用 Python Pandas 合并多个 CSV 文件