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
df.replace更换速度最快\xc2\xb1infmode.use_inf_as_nainf和-infdf = df.replace([np.inf, -np.inf], np.nan)\nRun Code Online (Sandbox Code Playgroud)\n请注意,这inplace是可能的,但不建议这样做,并且很快就会被弃用。
较慢的df.applymap选项:
df = df.applymap(lambda x: np.nan if x in [np.inf, -np.inf] else x)df = df.applymap(lambda x: np.nan if np.isinf(x) else x)df = df.applymap(lambda x: x if np.isfinite(x) else np.nan)mode.use_inf_as_na请注意,我们实际上根本不需要修改df。设置mode.use_inf_as_na只会改变方式inf并被-inf解释:
\n\n\n
True表示将None,nan,-inf,inf视为 null
\nFalse表示None和nan为空,但inf,-inf不为空(默认)
要么全局启用
\npd.set_option(\'mode.use_inf_as_na\', True)\nRun Code Online (Sandbox Code Playgroud)\n或者通过上下文管理器在本地
\nwith pd.option_context(\'mode.use_inf_as_na\', True):\n ...\nRun Code Online (Sandbox Code Playgroud)\n因此,替换整个数据帧的代码的问题不起作用,因为您需要将其分配回来或添加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)
| 归档时间: |
|
| 查看次数: |
15043 次 |
| 最近记录: |