Вам необходимо regex=True
:
>>> df2 = df.replace(r"_", "", regex=True)
В противном случае Pandas будет искать точные совпадения, где все содержимое ячейки - это одно подчеркивание.
Пример:
>>> d = {'col1': ["Dummy", "A_B__C_D"],
... 'col2': ["Dummy", "ABCD_"],
... 'col3': ["_", "_*_"]
... }
>>> df = pd.DataFrame(data=d)
>>> df.replace(r"_", "", regex=True)
col1 col2 col3
0 Dummy Dummy
1 ABCD ABCD *