如何从数据帧中删除nan, inf和-inf值而不重置模式。use_inf_as_null?
我可以告诉dropna包括inf在其缺失值的定义,以便以下工作?
df.dropna(subset=["col1", "col2"], how="all")
如何从数据帧中删除nan, inf和-inf值而不重置模式。use_inf_as_null?
我可以告诉dropna包括inf在其缺失值的定义,以便以下工作?
df.dropna(subset=["col1", "col2"], how="all")
当前回答
与这里的其他答案不同,这一行代码适合我。
import numpy as np
df= df[df['required_column_name']!= np.inf]
其他回答
首先用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
同样的方法也适用于级数。
使用选项上下文,无需永久设置use_inf_as_na就可以实现这一点。例如:
with pd.option_context('mode.use_inf_as_na', True):
df = df.dropna(subset=['col1', 'col2'], how='all')
当然,它可以被设置为永久地将inf视为NaN
pd.set_option('use_inf_as_na', True)
对于旧版本,请将use_inf_as_na替换为use_inf_as_null。
只是偶然发现了这一个,我发现了一行没有替换或numpy:
df = pd.DataFrame(
[[1, np.inf],
[1, -np.inf],
[1, 2]],
columns=['a', 'b']
)
df.query("b not in [inf, -inf]")
>>> a b
2 1 2.0
对于某些版本的pandas,可能需要在列b的名称周围使用back '。
与这里的其他答案不同,这一行代码适合我。
import numpy as np
df= df[df['required_column_name']!= np.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