【发布时间】:2020-05-14 13:32:57
【问题描述】:
我正在尝试在一个公共列“long_name”上合并两个数据框。但是当我在“long_name”上合并时,某些名称并没有发生合并,即使看起来像视觉上完全匹配的名称(即“Lionel Andrés Messi Cuccittini”(df1)到“Lionel Andrés Messi Cuccittini”(df2)):
df_merged = df.merge(df1, on="long_name", indicator=True, how='right')
Lionel Messi 被排除在外,根据指标列,他是合并中的“仅右”行。奇怪的是,“内马尔·达席尔瓦·桑托斯·小桑托斯”正在合并。为什么行之间存在差异?两者的来源都是一致的,df 来自 kaggle,df2 来自 scraping,并且对所有行名提取使用相同的脚本。
我尝试使用以下代码将 Lionel Messi 条目与 df 和 df1 隔离开来:
name1 = df.loc[df.short_name == 'L. Messi', ["long_name"]]
name2 = df1.loc[df1.name == 'Lionel Messi', ["long_name"]]
name1.values == name2.values
但结果是array([[False]])。我不确定他们为什么不匹配。
第一个 df 看起来像这样(前 8 行,df = df.loc[0:7,["short_name", "long_name"]]):
short_name long_name
0 L. Messi Lionel Andrés Messi Cuccittini
1 Cristiano Ronaldo Cristiano Ronaldo dos Santos Aveiro
2 Neymar Jr Neymar da Silva Santos Junior
3 J. Oblak Jan Oblak
4 E. Hazard Eden Hazard
5 K. De Bruyne Kevin De Bruyne
6 M. ter Stegen Marc-André ter Stegen
7 V. van Dijk Virgil van Dijk
第二个 df 看起来像这样(前 8 行,df1 = df1.loc[0:7,["name", "long_name"]]):
name long_name
0 Kylian Mbappé Kylian Sanmi Mbappé Lottin
1 Neymar Neymar da Silva Santos Júnior
2 Mohamed Salah محمد صلاح
3 Harry Kane Harry Edward Kane
4 Eden Hazard Eden Michael Hazard
5 Lionel Messi Lionel Andrés Messi Cuccitini
6 Raheem Sterling Raheem Shaquille Sterling
7 Antoine Griezmann Antoine Griezmann
【问题讨论】:
-
请分享minimal reproducible example。浏览一下您为隔离“Lionel Messi”而提供的 3 个代码示例,您是否尝试过前两个在
.loc[]中的列名周围没有方括号?另外,我真的建议使用[ ]来访问列,而不是 dot/./attribute 方法。
标签: python string pandas dataframe merge