Слияние панд тех же типов данных возвращает NaN - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь объединить два фрейма данных в одном столбце commit_id.Однако они не объединяются даже после проверки типов данных, чтобы убедиться, что они совпадают.

Мой первый кадр данных - df1, который содержит два столбца: commit_id и final_sentiment.Мой второй фрейм данных - df2, который содержит два столбца: commit_id и modification.

Я пытаюсь объединиться в df3, который будет содержать commit_id, modification и final_sentiment,Однако, если я сделаю левое соединение на df2, все значения в final_sentiment будут NaN.Если я сделаю правильное соединение, все значения в modification равны NaN.Я проверил тип commit_id и это объект.Основываясь на этом вопросе и этом , я попытался изменить тип на строку как таковой до объединения фреймов данных, но это не сработало.

df1.commit_id = df1.commit_id.astype(str)
df2.commit_id = df2.commit_id.astype(str)

РЕДАКТИРОВАТЬ: вот более сжатая версия данных, чтобы, надеюсь, прояснить вопрос.

У меня есть df1:

|  index | commit_id                                | final_sentiment |
|--------|------------------------------------------|-----------------|
| 807303 | 000e3673387b662e32f1037eeaea2aa29b630448 | -1              |

и яhave df2:

|   | commit_id                                | modification |
|---|------------------------------------------|--------------|
| 0 | 000e3673387b662e32f1037eeaea2aa29b630448 | 13           |

df1.info() возвращает:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 1 entries, 807303 to 807303
Data columns (total 2 columns):
commit_id          1 non-null object
final_sentiment    1 non-null int64
dtypes: int64(1), object(1)
memory usage: 24.0+ bytes

df2.info () возвращает:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1 entries, 0 to 0
Data columns (total 2 columns):
commit_id       1 non-null object
modification    1 non-null int64
dtypes: int64(1), object(1)
memory usage: 88.0+ bytes

Как вы можете видеть, онитот же тип для идентификатора фиксации, но когда я объединяю, он все еще возвращает NaN:

df3 = df2.merge(df1, on='commit_id', how='left')
df3

df3 возвращает:

|   | commit_id                                | modification | final_sentiment |
|---|------------------------------------------|--------------|-----------------|
| 0 | 000e3673387b662e32f1037eeaea2aa29b630448 | 13           | NaN             |

он должен возвращать:

|   | commit_id                                | modification | final_sentiment |
|---|------------------------------------------|--------------|-----------------|
| 0 | 000e3673387b662e32f1037eeaea2aa29b630448 | 13           | -1              |

Извините, за плохое форматирование.Форматирование ноутбука Jupyter не очень хорошо в стеке потока.

Как видите, я проверяю типы обоих фреймов данных, и они одинаковы.Я показываю как внутреннее соединение, так и левое соединение.Внутреннее соединение не возвращает результата, но левое соединение возвращает результат, как и должно быть, но последний мод - NaN.

Как получить правильное слияние фреймов данных, я не уверен, что происходит неправильноздесь

1 Ответ

0 голосов
/ 21 апреля 2019

Я нашел решение в этом посте . Был пустой символ, поэтому данные не совпадали. Использование str.strip() исправило проблему для меня.

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