如何修复:您正在尝试合并 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 DataFrame 但要合并的列是一个 DataFrame 中的对象和另一个 DataFrame 中的整数时,会发生此错误。

以下示例展示了如何在实践中纠正此错误。

如何重现错误

假设我们创建以下两个 panda DataFrame:

 import pandas as pd

#createDataFrame
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

现在假设我们尝试合并两个 DataFrame:

 #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 ,因为第一个 DataFrame 中的年份变量是整数,但第二个 DataFrame 中的年份变量是一个对象。

如何修复错误

修复此错误的最简单方法是将第二个 DataFrame 的年份变量转换为整数,然后进行合并。

以下语法显示了如何执行此操作:

 #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 ,并且我们成功地将两个 DataFrame 合并为一个。

其他资源

以下教程解释了如何修复 Python 中的其他常见错误:

如何修复:列重叠但未指定后缀
如何修复:对象“numpy.ndarray”没有“append”属性
如何修复:如果使用所有标量值,则需要传递索引

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注