Вычтите 1,00 из всех кадров данных панд.Получение больших отрицательных значений? - PullRequest
0 голосов
/ 20 января 2019

У меня есть пять фреймов данных. Я хочу вычесть 1,00 из всех фреймов данных, содержащих значения, равные 1 или меньше 1.

DT   D1   D2
0   1.0  1.0


RE   E1   E2   E3
0   1.0  1.0  0.8


FE   F1   F2
0   1.0  0.63


SE   S1   S2
0   1.0  1.0


DT   D1             D2          
RE   E1   E2   E3   E1   E2   E3
0   1.0  1.0  1.0  1.0  0.45  1.0


DT   D1                            D2                         
RE   E1        E2        E3        E1        E2        E3     
FE   F1   F2   F1   F2   F1   F2   F1   F2   F1   F2   F1   F2
0   1.0  0.0  0.0  1.0  1.0  1.0  1.0  1.0  1.0  0.0  1.0  1.0

Я пытался следовать всем кадрам данных, однако в некоторых случаях я получаю большие отрицательные значения, такие как 1.110223e-16, -2.220446e-16. Как избежать этих значений?

df = 1.00 - df

1 Ответ

0 голосов
/ 20 января 2019

1.110223e-16 не большое, отрицательное значение.Это на самом деле очень малая положительная ценность.e-16 представляет крошечный показатель.

1e-2
# 0.01

1e-4
# 0.0001

print('{:.16f}'.format(1e-16))
# 0.0000000000000001

Полагаю, вы столкнулись с несоответствиями с плавающей запятой .Например, единицы в ваших данных могут на самом деле иметь крошечные дроби с плавающей точкой:

1 + 1.110223e-16
# 1.0

Просто вы не сможете увидеть это при распечатке ваших DataFrames.


Одно из предложений, которое я бы предложил, это использовать np.isclose и установить эти значения около 0 на ноль.

df.values[np.isclose(df.values, 0)] = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...