El problema era que el object
dtype es engañoso. Pensé que significaba que todos los elementos eran cadenas. Pero aparentemente, mientras leía el archivo, pandas estaba convirtiendo algunos elementos en enteros y dejando los restos como cadenas.
La solución fue asegurarse de que cada campo sea una cadena:
>>> df1.col1 = df1.col1.astype(str)
>>> df2.col2 = df2.col2.astype(str)
Entonces la combinación funciona como se esperaba.
(Me gustaría que hubiera una forma de especificar un dtype
de str
...)