从所有 pandas 数据帧中减去 1.00。获得较大的负值?

Subtract 1.00 from all pandas data-frames. Getting large negative values?

我有五个数据框。我想从所有包含等于 1 或小于 1 的值的数据帧中减去 1.00。

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.110223e-16 不是很大的负值。它实际上是一个非常小的正值。 e-16 代表一个很小的指数。

1e-2
# 0.01

1e-4
# 0.0001

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

我猜你 运行 进入了 floating point inconsistencies。例如,您数据中的 1 实际上可能有微小的浮点数:

1 + 1.110223e-16
# 1.0

只是打印出 DataFrames 时看不到它。


我的一个建议是使用 np.isclose 并将这些接近 0 的值设置为零。

df.values[np.isclose(df.values, 0)] = 0