Python 处理pandas或numpy中的负无限数
我有一个包含大量负无限数(-np.inf)的文件,我尝试了我能想到的所有解决方案来删除它们或用0替换它们 下面是数据的样子Python 处理pandas或numpy中的负无限数,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有一个包含大量负无限数(-np.inf)的文件,我尝试了我能想到的所有解决方案来删除它们或用0替换它们 下面是数据的样子 id kind value time 0 1 tmx2005-01 -3.402823e+38 01 1 1 tmx2005-02 -3.402823e+38 02 2 1 tmx2005-03 -3.402823e+38 03 3 1 t
id kind value time
0 1 tmx2005-01 -3.402823e+38 01
1 1 tmx2005-02 -3.402823e+38 02
2 1 tmx2005-03 -3.402823e+38 03
3 1 tmx2005-04 -3.402823e+38 04
4 1 tmx2005-05 -3.402823e+38 05
如您所见,无穷多的数字位于“值”列下,我尝试的一些解决方案是:
df2.dropna()
df2.fillna(0, inplace=True)
df2.replace([np.inf, -np.inf], 0).dropna(subset=["value"], how="all")
df2['value'].replace([np.inf, -np.inf], np.nan)
df2['value']=df2['value'].mask(-np.isinf(df2['value']))
df2['value'][-np.isinf(df2['value'])] =0
关于我可能做错了什么或为什么它不起作用有什么想法吗?值
列中的值不是np.inf
或-np.inf
。因为您想删除那些非常大的值,所以可以尝试这样做。在这里,您可以使用df.value[0]
作为需要替换的值。首先替换为0:
df.replace(df.value[0], 0)
输出如下所示:
id kind value time
0 1 tmx2005-01 0.0 1
1 1 tmx2005-02 0.0 2
2 1 tmx2005-03 0.0 3
3 1 tmx2005-04 0.0 4
4 1 tmx2005-05 0.0 5
如果要将其替换为np.nan
值,则:
df.replace(df.value[0], np.nan)
使用value
列作为子集删除空值:
df.dropna(subset=["value"], how="all")
正如其他人指出的,您的“值”列中的值不是负无限的
无论如何,将它们视为无限数是没有意义的,因为它们距离Python中浮点的下限(大约2e+308)相差很多数量级
作为一个解决方案,我会选择一个值,在这个值下,你会认为某事是负无穷的。这里有一种类似蟒蛇的方法:
limit = -3.402823*10**38
df2['value'] = np.array([0 if value <= limit else value for value in df2['value'])
limit=-3.402823*10**38
df2['value']=np.array([0如果value我在您的数据中没有看到任何-np.inf
数字。只是非常负的数字。它们不是实际的np.inf,它们只是非常大。这些值是可以用32位浮点表示的最负的值;请查看np.finfo(np.float32).min
。这些值是如何在文件中结束的?运行代码得到的结果是=-3.4028235e+38。这些值是从转换为数据帧的光栅(像素)文件中生成的。其他人指出,这可能是一个很大的负数,但这并不重要,因为数据与温度有关。“…Python中浮点的下限,约为2e+308”实际上,-3.4028235e+38
是32位浮点可以表示的最负的值;请查看np.finfo(np.float32).min
。太棒了!这似乎很有意义。