如何从数据帧中删除nan, inf和-inf值而不重置模式。use_inf_as_null?

我可以告诉dropna包括inf在其缺失值的定义,以便以下工作?

df.dropna(subset=["col1", "col2"], how="all")

当前回答

你可以在np.isinf中使用pd.DataFrame.mask。首先你应该确保你的dataframe系列都是float类型。然后使用dropna现有的逻辑。

print(df)

       col1      col2
0 -0.441406       inf
1 -0.321105      -inf
2 -0.412857  2.223047
3 -0.356610  2.513048

df = df.mask(np.isinf)

print(df)

       col1      col2
0 -0.441406       NaN
1 -0.321105       NaN
2 -0.412857  2.223047
3 -0.356610  2.513048

其他回答

要使用单个命令删除Nan和inf,请使用

df = df[ np.isfinite( df ).all( axis = 1) ]

如果由于某种原因以上方法对你不起作用,请尝试以下2个步骤:

df = df[ ~( df.isnull().any( axis = 1 ) ) ] #to remove nan
df = df[ ~( df.isin( [np.inf, -np.inf]).any(axis =1) )] #to remove inf

你可以在np.isinf中使用pd.DataFrame.mask。首先你应该确保你的dataframe系列都是float类型。然后使用dropna现有的逻辑。

print(df)

       col1      col2
0 -0.441406       inf
1 -0.321105      -inf
2 -0.412857  2.223047
3 -0.356610  2.513048

df = df.mask(np.isinf)

print(df)

       col1      col2
0 -0.441406       NaN
1 -0.321105       NaN
2 -0.412857  2.223047
3 -0.356610  2.513048

与这里的其他答案不同,这一行代码适合我。

import numpy as np
df= df[df['required_column_name']!= np.inf]

还有一种解决方案是使用isin方法。使用它来确定每个值是无限的还是缺失的,然后链接all方法来确定行中的所有值是无限的还是缺失的。

最后,使用该结果的负数通过布尔索引选择不全是无穷大或缺失值的行。

all_inf_or_nan = df.isin([np.inf, -np.inf, np.nan]).all(axis='columns')
df[~all_inf_or_nan]

首先用NaN替换()infs:

df.replace([np.inf, -np.inf], np.nan, inplace=True)

然后通过dropna()删除nan:

df.dropna(subset=["col1", "col2"], how="all", inplace=True)

例如:

>>> df = pd.DataFrame({"col1": [1, np.inf, -np.inf], "col2": [2, 3, np.nan]})
>>> df
   col1  col2
0   1.0   2.0
1   inf   3.0
2  -inf   NaN

>>> df.replace([np.inf, -np.inf], np.nan, inplace=True)
>>> df
   col1  col2
0   1.0   2.0
1   NaN   3.0
2   NaN   NaN

>>> df.dropna(subset=["col1", "col2"], how="all", inplace=True)
>>> df
   col1  col2
0   1.0   2.0
1   NaN   3.0

同样的方法也适用于级数。