Проблема в том, что некоторые столбцы являются целыми числами в одном 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