2017-06-13 234 views
0
n1 = DataFrame({'zhanghui':[1,2,3,4] , 'wudi':[17,'gx',356,23] ,'sas'[234,51,354,123] }) 
n2 = DataFrame({'zhanghui_x':[1,2,3,5] , 'wudi':[17,23,'sd',23] ,'wudi_x':[17,23,'x356',23] ,'wudi_y':[17,23,'y356',23] ,'ddd':[234,51,354,123] }) 

代碼上面定義了兩個DataFrame對象。我想用「張輝」字段從N1和N2「zhanghui_x」字段爲「上」字段合併n1和n2,所以我的代碼是這樣的:熊貓合併產生重複列

n1.merge(n2,how = 'inner',left_on = 'zhanghui',right_on='zhanghui_x') 

,然後導致這樣給列:

sas  wudi_x zhanghui ddd  wudi_y wudi_x wudi_y zhanghui_x 

出現了一些重複的列,如'wudi_x','wudi_y'。 因此,這是一個熊貓內心的問題,或者我有一個關於pd.merge的錯誤用法?

+0

請發佈所需的輸出,這是預期的行爲,因爲您有不同的行值,因此它將衝突值預先設置爲新的x和y列 – EdChum

回答

0

你的做法是對的,大熊貓自動給出後記合併被「複製」欄後給予後記_x,_y原標題等

可以先選中要合併的列並着手:

cols_to_use = n2.columns - n1.columns 
n1.merge(n2[cols_to_use],how = 'inner',left_on = 'zhanghui',right_on='zhanghui_x') 

結果列:

sas wudi zhanghui ddd wudi_x wudi_y zhanghui_x 
0

當我試圖運行cols_to_use = n2.columns - n1.columns,它給了我這樣一個類型錯誤:

cannot perform __sub__ with this index type: <class pandas.core.indexes.base.Index'> 

然後我試着用下面的代碼:

cols_to_use = [i for i in list(n2.columns) if i not in list(n1.columns) ] 

它能正常工作,導致這樣給列:

sas wudi zhanghui ddd wudi_x wudi_y zhanghui_x 

所以,@小號Ringne的方法確實解決了我的問題。

=============================================

熊貓只是簡單地添加後綴,如'_x'來解決重複列名問題,當涉及到合併兩個框架對象。

但是,如果任何Frame對象中出現'a-​​column-name'+'_ x'的名稱形式,會發生什麼?我曾經認爲它會檢查'a-column-name'+'_ x'的名稱形式是否出現,但實際上大熊貓沒有這個檢查?