2016-07-05 73 views
2

我有两个dataframes看起来像这样的:熊猫追加数据帧,而无需创建新列

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

df2 = 
    A C 
4 A4 C4 
5 A5 C5 

我想追加df2df1,像这样:

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

(注:我已编辑数据帧,以便df1中的所有列都不一定在df2

是否使用concatappend,我得到的结果数据框将有一个名为“C”的列,前三行填写了nan。我只想保留df1中的两个原始列,并附加新值。有没有办法连接数据框,而不必删除额外的列之后?

+1

您可以编辑以显示您想要的最终数据框的样子吗?我很难想象它。 – Jeff

+0

对不起。我编辑了这个问题。 – mcglashan

回答

1

可以先筛选列由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 
+0

谢谢。这适用于我问这个问题的原始方式。如果不是df1的所有列都在df2中,我该怎么办? – mcglashan

+0

然后你在''(df1.append(df2))''不匹配的列中得到'NaN'。你需要附加其他方式吗? – jezrael

+0

您得到的结果看起来非常好,但是您必须为df1中的每个列而不是df2执行此操作。 – mcglashan

0

其实解决的办法是在this page一个不起眼的角落。以下是要使用的代码:

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