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