Pandas附加数据帧而不创建新列

时间:2016-07-05 13:53:28

标签: python pandas dataframe append concat

我有两个看起来像这样的数据框:

df1=
   A   B   
1  A1  B1
2  A2  B2
3  A3  B3

df2 = 
   A   C
4  A4  C4
5  A5  C5

我想将df2追加到df1,就像这样:

   A   B   
1  A1  B1
2  A2  B2
3  A3  B3
4  A4  NaN
5  A5  NaN

(注意:我已编辑了数据框,因此并非df1中的所有列都必须在df2中)

无论我使用concat还是append,我得到的结果数据都会有一个名为" C"的列。前三行填充nan。我只想在df1中保留两个原始列,并附加新值。有没有办法连接数据帧而不必在之后删除额外的列?

2 个答案:

答案 0 :(得分:2)

您可以先按subset

过滤要追加的列
print (df2[['A']])
    A
4  A4
5  A5

print (pd.concat([df1, df2[['A']]]))
    A    B
1  A1   B1
2  A2   B2
3  A3   B3
4  A4  NaN
5  A5  NaN

print (df1.append(df2[['A']]))
    A    B
1  A1   B1
2  A2   B2
3  A3   B3
4  A4  NaN
5  A5  NaN
print (df2[['A','B']])
    A   B
4  A4  B4
5  A5  B5

print (pd.concat([df1, df2[['A','B']]]))
    A   B
1  A1  B1
2  A2  B2
3  A3  B3
4  A4  B4
5  A5  B5

或者:

print (df1.append(df2[['A','B']]))
    A   B
1  A1  B1
2  A2  B2
3  A3  B3
4  A4  B4
5  A5  B5

通过评论编辑:

如果df1df2中的列有不同的列,请使用intersection

print (df1)
    A   B  D
1  A1  B1  R
2  A2  B2  T
3  A3  B3  E

print (df2)
    A   B   C
4  A4  B4  C4
5  A5  B5  C5

print (df1.columns.intersection(df2.columns))
Index(['A', 'B'], dtype='object')

print (pd.concat([df1, df2[df1.columns.intersection(df2.columns)]]))
    A   B    D
1  A1  B1    R
2  A2  B2    T
3  A3  B3    E
4  A4  B4  NaN
5  A5  B5  NaN

答案 1 :(得分:0)

实际上,解决方案位于this page的一个不起眼的角落。这是使用的代码:

pd.concat([df1,df2],join_axes=[df1.columns])