将 pandas 数据框中的所有 inf、-inf 值替换为 NaN

pos*_*ist 12 replace find inf dataframe pandas

我有一个大型数据框,不同列中包含 inf、-inf 值。我想用 NaN 替换所有 inf、-inf 值

我可以逐栏这样做。所以这有效:

df['column name'] = df['column name'].replace(np.inf, np.nan)
Run Code Online (Sandbox Code Playgroud)

但我的代码在数据帧中一次性执行此操作却没有。

df.replace([np.inf, -np.inf], np.nan)
Run Code Online (Sandbox Code Playgroud)

输出不会替换 inf 值

tdy*_*tdy 15

长话短说

\n\n
\n

更换inf-inf

\n
df = df.replace([np.inf, -np.inf], np.nan)\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,这inplace是可能的,但不建议这样做,并且很快就会被弃用

\n

\n

较慢的df.applymap选项:

\n
    \n
  • df = df.applymap(lambda x: np.nan if x in [np.inf, -np.inf] else x)
  • \n
  • df = df.applymap(lambda x: np.nan if np.isinf(x) else x)
  • \n
  • df = df.applymap(lambda x: x if np.isfinite(x) else np.nan)
  • \n
\n
\n

环境mode.use_inf_as_na

\n

请注意,我们实际上根本不需要修改df。设置mode.use_inf_as_na只会改变方式inf并被-inf解释:

\n
\n

True表示将None, nan, -inf,inf视为 null
\nFalse表示Nonenan为空,但inf,-inf不为空(默认)

\n
\n\n

  • 用例:当我设置 mode.use_inf_as_na 时,出现错误“ValueError:输入 X 包含无穷大或对于 dtype('float64') 来说太大的值。” 来自 MinMaxScaler。之后我回到 df.replace()。 (2认同)

sop*_*les 6

pandas.Series.replace不会就地发生。

因此,替换整个数据帧的代码的问题不起作用,因为您需要将其分配回来或添加inplace=True为参数。这也是逐列工作的原因,因为您将其分配回该列df['column name'] = ...

因此,更改df.replace([np.inf, -np.inf], np.nan)为:

df.replace([np.inf, -np.inf], np.nan,inplace=True)
Run Code Online (Sandbox Code Playgroud)

或者分配回一个新的数据框:

df = df.replace([np.inf, -np.inf], np.nan)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述