Точные визуальные соответствия между общими столбцами в фреймах данных, не совпадающие при слиянии - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь объединить два кадра данных в общий столбец "длинное_имя". Но слияние не происходит для некоторых имен, даже если они выглядят как визуально точные совпадения (ie «Лионель Андрес Месси Куччиттини» (df1) - «Лионель Андрес Месси Куччиттини» (df2)), когда я объединяю «long_name»:

df_merged = df.merge(df1, on="long_name", indicator=True, how='right')

Лионель Месси пропущен и, согласно столбцу индикатора, он является строкой "right_only" после слияния. Странно, что «Неймар да Сильва Сантос Жуниор» сливается. Почему между строками есть расхождение? Оба были получены последовательно: df из kaggle и df2 из списков и с использованием одного и того же сценария для всех извлеченных имен строк.

Я попытался изолировать обе записи 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

1 Ответ

0 голосов
/ 29 января 2020

Вы уверены, что это не просто случай с ошибочным именем?

df перечисляет long_name как Lionel Andrés Messi Cuccittini, тогда как df1 перечисляет его как Lionel Andrés Messi Cuccitini. Я заметил, что df имеет 2 t в Cuccittini, но df имеет 1.

Вручную исправьте второй кадр данных и повторите попытку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...