关于python:将多个数据帧合并在一起

Merge several dataframes together

我有多个(n)数据帧,行长度可变,每个数据帧有3列。我只需要每个数据帧的第一列,所以我使用df.drop删除了其他列。我想将它们合并到一个具有n列的数据帧中。我用pd.concat合并。

1
2
3
4
5
6
7
    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文件:

1
2
3
4
5
6
7
8
9
    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可以解决这个问题,但事实并非如此。

预期输出:

1
2
3
4
5
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。


将df2的索引更改为与df1相同

1
2
3
4
5
6
7
8
9
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


reset_index和参数reset_index(drop=True)创建的两个数据帧中需要相同的索引值:

1
2
3
4
5
6
7
8
9
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