我有多个(n)个数据帧,这些数据帧具有可变的行长和每个3列。我只想要每个数据框的第一列,所以我使用df.drop删除了其他列。
我想将它们合并为一个具有n列的数据框。
我使用pd.concat进行合并。
df1.drop(columns=['col2' ,'col3']).to_csv('df1.csv', sep=';')
df2.drop(columns=['col2', 'col3']).to_csv('df2.csv', sep=';')
pd.concat([pd.concat([df1.drop(columns=['col2','col3']),
df2.drop(columns=['col2','col3'])] ,axis=1)])\
.to_csv('merged.csv', sep=';')
它为csv文件提供以下输出:
col1 (df1) col1 (df1)
0 0.0
1 0.055
2 0.096
3 0.131
2074 70.997
2075 71.002
2076 71.065
2077 71.101
所以您看到它只是将列添加为行。例如,第3行在第2列中为空。在第1列中排2074为空。 我以为axis = 1可以解决这个问题,但事实并非如此。
预期输出:
col1 (df1) col1 (df1)
0 0.0 70.997
1 0.055 71.002
2 0.096 71.065
3 0.131 71.101
如果我尝试axis = 1, ignoreIndex=True
,则列名将更改为0和1。
答案 0 :(得分:1)
在reset_index
和参数reset_index(drop=True)
创建的两个DataFrame中都需要相同的索引值:
df3 = pd.concat([df1['col1'].reset_index(drop=True),
df2['col1'].reset_index(drop=True)], axis=1)
df3.columns = ['col1 (df1)','col1 (df2)']
print (df3)
col1 (df1) col1 (df2)
0 0.000 70.997
1 0.055 71.002
2 0.096 71.065
3 0.131 71.101
答案 1 :(得分:1)
将df2的索引更改为与df1相同
df2.index=df1.index
df1['col1(df2)']=df2.col1
df1.rename(columns={'col1':'col1(df1)'})
Out[7]:
col1(df1) col1(df2)
0 0.000 70.997
1 0.055 71.002
2 0.096 71.065
3 0.130 71.101