Подтвердить что ты не робот

Pandas: простое соединение не работает?

Мне нравится думать, что я не идиот, но, возможно, я ошибаюсь. Может ли кто-нибудь объяснить мне, почему это не работает? Я могу достичь желаемых результатов, используя "merge". Но в конечном итоге мне нужно объединить несколько pandas DataFrames, поэтому мне нужно заставить этот метод работать.

In [2]: left = pandas.DataFrame({'ST_NAME': ['Oregon', 'Nebraska'], 'value': [4.685, 2.491]})

In [3]: right = pandas.DataFrame({'ST_NAME': ['Oregon', 'Nebraska'], 'value2': [6.218, 0.001]})

In [4]: left.join(right, on='ST_NAME', lsuffix='_left', rsuffix='_right')
Out[4]: 
  ST_NAME_left  value ST_NAME_right  value2
0       Oregon  4.685           NaN     NaN
1     Nebraska  2.491           NaN     NaN
4b9b3361

Ответ 1

Попробуйте использовать merge:

In [14]: right
Out[14]: 
    ST_NAME  value2
0    Oregon   6.218
1  Nebraska   0.001

In [15]: merge(left, right)
Out[15]: 
    ST_NAME  value  value2
0  Nebraska  2.491   0.001
1    Oregon  4.685   6.218

In [18]: merge(left, right, on='ST_NAME', sort=False)
Out[18]: 
    ST_NAME  value  value2
0    Oregon  4.685   6.218
1  Nebraska  2.491   0.001

DataFrame.join является устаревшим методом и, по-видимому, не выполняет соединения по столбцам (первоначально он выполнял индексирование по столбцам с использованием параметра on, отсюда и традиционное обозначение).

Ответ 2

Я могу подтвердить, метод присоединения Панд неисправен. В моем случае оба ключа были длинными строками (18 символов), и в результате получалось, что панды соответствуют только первой паре символов. Функция слияния работает правильно. Пожалуйста, не используйте функцию соединения, она должна быть действительно удалена из доступных методов, иначе это может привести к большим ошибкам.