在具有NaN值的熊猫数据框上操作时精度下降 - python

我有一个熊猫数据框,我想减去两个列值:

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

更新:自熊猫的1.0.0版本以来,这不再是一个问题。整数值允许为NaN。 https://pandas.pydata.org/pandas-docs/version/1.0.0/user_guide/missing_data.html#missing-data-na

pandas DataFrame:根据另一列中的布尔值计算总和 - python

我对Python相当陌生,我尝试在pandas中模拟以下逻辑我目前正在循环抛出行,并希望对前几行的AMOUNT列中的值求和,但只求和最后一次看到的“ TRUE”值。实际数据似乎效率低下(我的数据框大约有500万行)?想知道用Python处理这种逻辑的有效方法是什么?逻辑:逻辑是,如果FLAG为TRUE,我想对前几行的AMOUNT列中的值求和,但只求和最后一次…

Python uuid4,如何限制唯一字符的长度 - python

在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢。 参考方案 尝试:x = uuid4() str(x)[:8] 输出:"ffc69c1b" Is there a way to…

pandas.DataFrame.replace更改列的dtype - python

因此,我试图用np.nan替换数据框中的None值,并注意到在此过程中,即使数据框中的float列的数据类型不包含任何丢失的数据,它们也都更改为object。举个例子:import pandas as pd import numpy as np data = pd.DataFrame({'A':np.nan,'B':1…

重命名默认ID python - python

我想连接两个dataFrames,但是两个数据具有不同的ID,所以结果是错误的这是我的代码data=pd.DataFrame(df.columns) data1=data.drop(axis=1,index=[0,1,2,3]).transpose() data1 这是dataframe1另一个数据框:y=sma_algo(df.loc['H+L&…

Python-crontab模块 - python

我正在尝试在Linux OS(CentOS 7)上使用Python-crontab模块我的配置文件如下:{ "ossConfigurationData": { "work1": [ { "cronInterval": "0 0 0 1 1 ?", "attribute&…