Проблемът беше, че object
dtype е подвеждащ. Мислех, че това означава, че всички елементи са низове. Но очевидно, докато четеше файла, pandas преобразува някои елементи в ints и оставяше остатъците като низове.
Решението беше да се уверите, че всяко поле е низ:
>>> df1.col1 = df1.col1.astype(str)
>>> df2.col2 = df2.col2.astype(str)
След това сливането работи както се очаква.
(Иска ми се да има начин за посочване на dtype
на str
...)