如果我运行python 2,以下命令可以正常工作
df5b = pd.merge(df5a, df5bb, how='outer')
但是,当我在python 3中使用相同的dfs运行相同的命令时,出现以下错误:
ValueError: You are trying to merge on object and int64 columns. If you wish to proceed you should use pd.concat
我的数据框非常大,我希望有人能在不提供我的数据框示例的情况下帮助我。该命令在python 2上还可以,因此我认为问题不在于数据帧,而可能是在python 3中对此命令进行了更改吗?
答案 0 :(得分:2)
有些列在一个DataFrame中是整数,而在另一个具有相同名称的字符串中则存在问题。
最简单的解决方案是将所有列都转换为字符串:
df5b = pd.merge(df5a.astype(str), df5bb.astype(str), how='outer')
另一个是测试dtypes:
print (df5a.dtypes)
print (df5bb.dtypes)
并转换相同的列,例如将字符串列从列表转换为整数:
cols = ['col1','col12','col3']
df5a[cols] = df5a[cols].astype(int)
示例:
df5a = pd.DataFrame({
'B':[4,5,4,5],
'C':[7,8,9,4],
'F':list('aaab')
})
df5bb = pd.DataFrame({
'B':['4','5','5'],
'F':list('aab')
})
df5b = pd.merge(df5a.astype(str), df5bb.astype(str), how='outer')
print (df5b)
B C F
0 4 7 a
1 4 9 a
2 5 8 a
3 5 4 b
print (df5a.dtypes)
B int64
C int64
F object
dtype: object
print (df5bb.dtypes)
B object
F object
dtype: object
cols = ['B']
df5bb[cols] = df5bb[cols].astype(int)
df5b = pd.merge(df5a, df5bb, how='outer')
print (df5b)
B C F
0 4 7 a
1 4 9 a
2 5 8 a
3 5 4 b
答案 1 :(得分:0)
正如我在评论部分中所述,混合类型(可能是int
,str
或float
上不会发生强制转换,因此您可以考虑concat或将其转换为str
,然后合并jezrael提到的内容。
只需确定您可以看到的类型即可。
>>> pd.concat([df5a, df5bb]).dtypes
B object
C float64
F object
dtype: object
>>> pd.concat([df5a, df5bb])
B C F
0 4 7.0 a
1 5 8.0 a
2 4 9.0 a
3 5 4.0 b
0 4 NaN a
1 5 NaN a
2 5 NaN b