Как исправить: вы пытаетесь объединить столбцы object и int64


Одна ошибка, с которой вы можете столкнуться при использовании pandas:

ValueError : You are trying to merge on int64 and object columns.
 If you wish to proceed you should use pd.concat

Эта ошибка возникает, когда вы пытаетесь объединить два кадра данных pandas, но столбец, который вы объединяете, является объектом в одном кадре данных и целым числом в другом кадре данных.

В следующем примере показано, как исправить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, мы создаем следующие два кадра данных pandas:

import pandas as pd

#create DataFrame
df1 = pd.DataFrame({'year': [2015, 2016, 2017, 2018, 2019, 2020, 2021],
 'sales': [500, 534, 564, 671, 700, 840, 810]})

df2 = pd.DataFrame({'year': ['2015', '2016', '2017', '2018', '2019', '2020', '2021'],
 'refunds': [31, 36, 40, 40, 43, 70, 62]})

#view DataFrames
print(df1)

 year sales
0 2015 500
1 2016 534
2 2017 564
3 2018 671
4 2019 700
5 2020 840
6 2021 810

print(df2)

 year refunds
0 2015 31
1 2016 36
2 2017 40
3 2018 40
4 2019 43
5 2020 70
6 2021 62

Теперь предположим, что мы пытаемся объединить два DataFrames:

#attempt to merge two DataFrames
big_df = df1.merge(df2, on='year', how='left')

ValueError : You are trying to merge on int64 and object columns.
 If you wish to proceed you should use pd.concat

Мы получаем ValueError , потому что переменная года в первом кадре данных является целым числом, а переменная года во втором кадре данных является объектом.

Как исправить ошибку

Самый простой способ исправить эту ошибку — просто преобразовать переменную года во втором кадре данных в целое число, а затем выполнить слияние.

Следующий синтаксис показывает, как это сделать:

#convert year variable in df2 to integer
df2['year']=df2['year'].astype (int)

#merge two DataFrames
big_df = df1.merge(df2, on='year', how='left')

#view merged DataFrame
big_df

 year sales refunds
0 2015 500 31
1 2016 534 36
2 2017 564 40
3 2018 671 40
4 2019 700 43
5 2020 840 70
6 2021 810 62

Обратите внимание, что мы не получаем никаких ошибок ValueError и можем успешно объединить два кадра данных в один.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как исправить: столбцы перекрываются, но суффикс не указан
Как исправить: объект «numpy.ndarray» не имеет атрибута «добавлять»
Как исправить: при использовании всех скалярных значений необходимо передать индекс

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.