我正在玩Kaggle数据集“欧洲足球数据库”,并希望将它与另一个FIFA18数据集结合起来。如何在熊猫中按特定列合并两个数据集
我的问题是这两个数据集中的名称列使用不同的格式。
例如:“梅西”,在一个数据集,并在另一方面,它是“L梅西”
我会到“L梅西”转换为小写版本“梅西”的所有行在数据集中。
什么是最明智的方式去做这件事?
我正在玩Kaggle数据集“欧洲足球数据库”,并希望将它与另一个FIFA18数据集结合起来。如何在熊猫中按特定列合并两个数据集
我的问题是这两个数据集中的名称列使用不同的格式。
例如:“梅西”,在一个数据集,并在另一方面,它是“L梅西”
我会到“L梅西”转换为小写版本“梅西”的所有行在数据集中。
什么是最明智的方式去做这件事?
一个简单的方法是在两个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 Wambach
和Aaron Wambach
,他们将看起来像a. wambach
。如果一个数据帧试图通过使用名称中的其他首字母来区分它们,如m.a. wambach
和a.k. wambach
,则天真匹配将失败。你如何处理这取决于你的数据的大小 - 也许你可以用这种方式来匹配大多数玩家,看看谁被丢弃,并从中写入自定义代码。
[在Pandas中合并两个数据集]可能的副本(https://stackoverflow.com/questions/43909479/merge-two-datasets-in-pandas) – thatrockbottomprogrammer
基于部分匹配不易合并 – Dark