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

rfe*_*and 5 python concatenation append dataframe pandas

我有两个数据框,如下所示:

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

df2 = 
   A   C
4  A4  C4
5  A5  C5
Run Code Online (Sandbox Code Playgroud)

我想附加df2df1,如下所示:

   A   B   
1  A1  B1
2  A2  B2
3  A3  B3
4  A4  NaN
5  A5  NaN
Run Code Online (Sandbox Code Playgroud)

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

无论我使用concatappend,我得到的结果数据帧都会有一个名为“C”的列,前三行填充为nan。我只想保留两个原始列df1,并附加新值。有没有一种方法可以连接数据帧而不必随后删除额外的列?

jez*_*ael 3

您可以首先过滤要附加的列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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)

或者:

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

按评论编辑:

df1如果和中的列df2具有不同的列,请使用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
Run Code Online (Sandbox Code Playgroud)