Я пытаюсь сделать простое слияние между двумя файлами данных. Они исходят из двух разных таблиц SQL, где соединяющие ключи являются строками:
>>> df1.col1.dtype
dtype('O')
>>> df2.col2.dtype
dtype('O')
Я пытаюсь объединить их, используя это:
>>> merge_res = pd.merge(df1, df2, left_on='col1', right_on='col2')
Результат внутреннего объединения пуст, и это сначала подсказывало мне, что на пересечении могут быть не какие-либо записи:
>>> merge_res.shape
(0, 19)
Но когда я пытаюсь сопоставить один элемент, я вижу это действительно странное поведение.
# Pick random element in second dataframe
>>> df2.iloc[5,:].col2
'95498208100000'
# Manually look for it in the first dataframe
>>> df1[df1.col1 == '95498208100000']
0 rows × 19 columns
# Empty, which makes sense given the above merge result
# Now look for the same value as an integer
>>> df1[df1.col1 == 95498208100000]
1 rows × 19 columns
# FINDS THE ELEMENT!?!
Итак, столбцы определяются с типом 'object'. Поиск их в виде строк не дает никаких результатов. Поиск их как целых чисел возвращает результат, и я думаю, что это причина, по которой слияние не работает выше.
Любые идеи, что происходит?
Это почти так, как думал Pandas преобразует df1.col1
в целое число только потому, что он может, хотя он должен рассматриваться как строка при сопоставлении.
(Я попытался реплицировать это, используя образцы данных, но для небольших примеров я не вижу этого. Любые предложения о том, как я могу найти более описательный пример, также будут оценены.)