合并3个或更多数据帧

2024-09-27 18:20:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试通过索引合并3个数据帧,但是到目前为止没有成功

代码如下:

import pandas as pd
from functools import reduce

#identifying csvs

x='/home/'
csvpaths = ("Data1.csv", "Data2.csv", "Data3.csv")
dfs = list()   # an empty list

#creating dataframes based on number of csvs

for i in range (len(csvpaths)):
    dfs.append(pd.read_csv(str(x)+ csvpaths[i],index_col=0))
print(dfs[1])

#creating suffix for each dataframe's columns
S=[]

for y in csvpaths:
    s=str(y).split('.csv')[0]
    S.append(s)
print(S)



#merging attempt
dfx = lambda a,b: pd.merge(a,b,on='SHIP_ID',suffixes=(S)), dfs

print(dfx)
print(dfx.columns)

如果我尝试将其导出为csv,则会出现如下错误(当我尝试打印dfx.columns时出现类似错误): “tuple”对象没有“to_csv”属性

我想要的输出是如下3个数据帧的合并(带有各自的后缀),请帮助

[注:下表非常简化,原始表由几十列和数千行组成,因此需要实际的合并方法]

enter image description here


Tags: columnscsv数据inimportcreatingforon
1条回答
网友
1楼 · 发布于 2024-09-27 18:20:21

尝试:

for s,el in zip(suffixes, dfs):
    el.columns=[str(col)+s for col in el.columns]

dfx=pd.concat(dfs, ignore_index=True, sort=False, axis=1)

对于我使用的测试用例:

import pandas as pd

dfs=[pd.DataFrame({"x": [1,2,7], "y": list("ghi")}), pd.DataFrame({"x": [5,6], "z": [4,4]}), pd.DataFrame({"x": list("acgjksd")})]

suffixes=["_1", "_2", "_3"]

for s,el in zip(suffixes, dfs):
    el.columns=[str(col)+s for col in el.columns]

>>> pd.concat(dfs, ignore_index=True, sort=False, axis=1)

   x_1  y_1  x_2  z_2 x_3
0  1.0    g  5.0  4.0   a
1  2.0    h  6.0  4.0   c
2  7.0    i  NaN  NaN   g
3  NaN  NaN  NaN  NaN   j
4  NaN  NaN  NaN  NaN   k
5  NaN  NaN  NaN  NaN   s
6  NaN  NaN  NaN  NaN   d


编辑

for s,el in zip(suffixes, dfs):
    el.columns=[str(col)+s for col in el.columns]
    el.set_index('ID', inplace=True)

dfx=pd.concat(dfs, ignore_index=False, sort=False, axis=1).reset_index()

相关问题 更多 >

    热门问题