2017-10-20 35 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,则天真匹配将失败。你如何处理这取决于你的数据的大小 - 也许你可以用这种方式来匹配大多数玩家,看看谁被丢弃,并从中写入自定义代码。