2017-10-20 34 views
0

我正在玩Kaggle數據集「歐洲足球數據庫」,並希望將它與另一個FIFA18數據集結合起來。如何在熊貓中按特定列合併兩個數據集

我的問題是這兩個數據集中的名稱列使用不同的格式。

例如:「梅西」,在一個數據集,並在另一方面,它是「L梅西」

我會到「L梅西」轉換爲小寫版本「梅西」的所有行在數據集中。

什麼是最明智的方式去做這件事?

+0

[在Pandas中合併兩個數據集]可能的副本(https://stackoverflow.com/questions/43909479/merge-two-datasets-in-pandas) – thatrockbottomprogrammer

+0

基於部分匹配不易合併 – Dark

回答

0

一個簡單的方法是在兩個dataframes的名稱轉換成通用格式,使他們能夠匹配。*假設在df1的名字都在L. Messi格式和df2的名字都在lionel messi格式。通用格式會是什麼樣子?你有幾個選擇,但是一個選項將全部小寫,只有第一個首字母后跟一個句點:l. messi

df1 = pd.DataFrame({'names': ['L. Messi'], 'x': [1]}) 
df2 = pd.DataFrame({'names': ['lionel messi'], 'y': [2]}) 

df1.names = df1.names.str.lower() 
df2.names = df2.names.apply(lambda n: n[0] + '.' + n[n.find(' '):]) 

df = df1.merge(df2, left_on='names', right_on='names') 

*注意:這種做法是完全依賴於名字是這樣「可匹配」。有很多案例可能導致這種簡單的方法失敗。如果一個團隊有兩個成員,Abby WambachAaron Wambach,他們將看起來像a. wambach。如果一個數據幀試圖通過使用名稱中的其他首字母來區分它們,如m.a. wambacha.k. wambach,則天真匹配將失敗。你如何處理這取決於你的數據的大小 - 也許你可以用這種方式來匹配大多數玩家,看看誰被丟棄,並從中寫入自定義代碼。