2016-07-05 72 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])