gpt4 book ai didi

python - 在具有 NaN 值的 pandas 数据帧上操作时精度损失

转载 作者:行者123 更新时间:2023-12-03 02:37:33 24 4
gpt4 key购买 nike

我有一个 pandas 数据框,我想在其中减去两列值:

df = pd.DataFrame({"Label":["NoPrecisionLoss"],
"FirstNsae":[1577434369549916003],
"SecondNsae":[1577434369549938679]})
print(df.SecondNsae - df.FirstNsae)

减法的结果是正确的22676

现在,当输入数据帧获取其中包含 nan 值的第二行时:

df2 = pd.DataFrame({"Label":["PrecisionLoss","NeedsToBeRemoved"],
"FirstNsae":[1577434369549916003,np.nan],
"SecondNsae":[1577434369549938679,66666666666666]})

这个 nan 值很糟糕,因此我们将删除包含它的行:

df2 = df2[np.isfinite(df2.FirstNsae) & np.isfinite(df2.SecondNsae)]

让我们将 FirstNsae 列转换回 int(FirstNsae 被分配为 float 因为第二行中的 nan 值):

df2 = df2.astype({"FirstNsae":int})  # this is futile since precision as already been lost
print(df2.SecondNsae - df2.FirstNsae)

打印两列之间的差异会产生 22775

在构造具有极大整数的数据帧时如何避免丢失精度可能存在nan

谢谢!

最佳答案

为了详细说明 piRSquared 的答案(在原始问题的评论中),以下是解决原始问题的方法:

df2 = pd.DataFrame({"Label":["PrecisionLoss","NeedsToBeRemoved"],
"FirstNsae":[1577434369549916003,np.nan],
"SecondNsae"[1577434369549938679,66666666666666]},
dtype=object)
df2 = df2[np.isfinite(df2.FirstNsae.astype(float)) &
np.isfinite(df2.SecondNsae.astype(float)]

print(df2.SecondNsae - df2.FirstNsae)

打印22676!

更新:从 Panda 1.0.0 版本开始,这不再是问题。整数值允许为 NaN。 https://pandas.pydata.org/pandas-docs/version/1.0.0/user_guide/missing_data.html#missing-data-na

关于python - 在具有 NaN 值的 pandas 数据帧上操作时精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59888428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com