Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 处理pandas或numpy中的负无限数_Python_Pandas_Numpy_Dataframe - Fatal编程技术网

Python 处理pandas或numpy中的负无限数

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

我有一个包含大量负无限数(-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   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
。太棒了!这似乎很有意义。