我有一个包含大量负无穷大数字(-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
关于我可能做错了什么或为什么它做不到的任何想法?
答案 0 :(得分:2)
value
列中的值不是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")
答案 1 :(得分:1)
正如其他人指出的那样,“值”列中的值不是负无穷大。
无论如何都将它们视为无穷大是没有意义的,因为它们与Python中的float的下限(大约2e + 308)相差多个数量级。
作为一种解决方案,我将选择一个值,在该值下,您将认为某事物为负无穷大。这是一种实现此目的的Python方法:
limit = -3.402823*10**38
df2['value'] = np.array([0 if value <= limit else value for value in df2['value'])