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