【问题标题】:Exact visual matches between common columns in dataframes not matching on merge数据框中常见列之间的精确视觉匹配在合并时不匹配
【发布时间】: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


【解决方案1】:

您确定这不仅仅是名称拼写错误的情况吗?

dflong_name 列为Lionel Andrés Messi Cuccittini,而df1 将其列为Lionel Andrés Messi Cuccitini。我注意到dfCuccittini 中有2 个t,但df 有1 个。

手动更正第二个数据帧并重试。

【讨论】:

  • 感谢您指出这一点。我会看看这是否是整个数据集行为的原因。
猜你喜欢
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
相关资源
最近更新 更多