Я считаю, что у вас есть тип данных 8-битное целое число без знака. Для этого типа данных нет отрицательных значений и, следовательно, -1
переполняется (недополняется?) До наибольшего такого числа.
df = pd.DataFrame([[0, 1], [1, 0]], dtype=np.uint8)
df.replace(0, -1)
0 1
0 255 1
1 1 255
Где 255
является наибольшим таким числом.
np.iinfo(np.uint8).max
255
Вместо этого сначала установите тип данных
df.astype(int).replace(0, -1)
0 1
0 -1 1
1 1 -1