2017-04-24 53 views
2

我有以下Dataframes:如何在熊貓中連接兩個不同列數的框架?

數據幀1:

|---------------------|------------------| 
|  property_id |  beds  | 
|---------------------|------------------| 
|   1   |   1  | 
|---------------------|------------------| 
|   2   |   2  | 
|---------------------|------------------| 

數據幀2:

|---------------------| 
|  property_id | 
|---------------------| 
|   3   | 
|---------------------| 
|   4   | 
|---------------------| 

我想產生如下數據框:

|---------------------|------------------| 
|  property_id |  beds  | 
|---------------------|------------------| 
|   1   |   1  | 
|---------------------|------------------| 
|   2   |   2  | 
|---------------------|------------------| 
|   3   |   0  | 
|---------------------|------------------| 
|   4   |   0  | 
|---------------------|------------------| 

我想要連接兩個數據框,前者的列數多於後者,但後者的所有列都在前者中。當列在後面的數據框中不存在時,我想將默認值設置爲0.我該如何實現?

df1 = pd.DataFrame({'property_id': [1, 2], 'beds': [1, 2]}) 
df2 = pd.DataFrame({'property_id': [3, 4]}) 

我幾乎沒有熊貓的經驗,所以我該怎麼辦?

回答

3

您可以使用pandas.concatappend方法對於這一點,這兩種方法都會產生NA對於沒有在子數據幀存在,用零來填補他們列,您可以使用fillna(0)

df1.append(df2).fillna(0) 

# beds  property_id 
#0 1.0   1 
#1 2.0   2 
#0 0.0   3 
#1 0.0   4 


pd.concat([df1, df2]).fillna(0) 

# beds  property_id 
#0 1.0   1 
#1 2.0   2 
#0 0.0   3 
#1 0.0   4 
+0

謝謝,它的工作?哪一個在時間問題上更有效? – lmiguelvargasf

+1

一些簡單的時序表明它們的速度差不多,但如果你有兩個以上的數據幀列表,'pd.concat'有一個優點,因爲它可以在一個命令中作爲'pd.concat(list_of_dataframes)'來完成'而'append'不能。但嚴格來說,我對這兩種方法的時間比較知之甚少。我經常使用'pd.concat'。 – Psidom

+0

非常感謝你。 – lmiguelvargasf

2
df1.append(df2.reindex_axis(df1.columns, 1, fill_value=0)) 

好處是整數類型應該保留

+0

你應該保留「整數類型」是什麼意思? – lmiguelvargasf

+1

@lmiguelvargasf我的意思是,當你連續,追加,重新索引,或以其他方式在整數列中引入潛在的南,你會自動將該列轉換爲浮動。通過重新索引其他數據框列並使用fill_value選項,我們告訴大熊貓不轉換,但保持爲整數,並用零填充缺失。而且,這對concat也同樣適用。 – piRSquared

相關問題