You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除Pandas DataFrame中含-inf或NaN值的行与列?

在Pandas中移除含-inf/NaN值的行或列

一、移除包含-inf或NaN的行

Pandas的dropna()默认只识别NaN,所以需要先把无穷值(inf/-inf)统一转为NaN,再进行行移除;也可以直接通过布尔索引筛选符合条件的行。

方法1:先替换无穷值为NaN,再删除行

import pandas as pd
import numpy as np

# 示例DataFrame
df = pd.DataFrame({
    'A': [1, 2, np.nan, 4],
    'B': [np.inf, 5, 6, -np.inf],
    'C': [7, 8, 9, 10]
})

# 将inf和-inf替换为NaN
df.replace([np.inf, -np.inf], np.nan, inplace=True)
# 删除任何包含NaN的行(默认how='any')
df_clean_rows = df.dropna(axis=0)

如果只想删除所有值都是缺失值的行,可修改参数:df.dropna(axis=0, how='all')

方法2:直接用布尔索引筛选行

无需替换NaN,直接排除含NaN或无穷值的行:

# 筛选每行所有值既不是NaN也不是inf/-inf的行
df_clean_rows = df[~(df.isna().any(axis=1) | df.isin([np.inf, -np.inf]).any(axis=1))]

二、移除包含-inf或NaN的列

逻辑和移除行一致,只需调整轴参数或索引方向。

方法1:替换无穷值后删除列

df.replace([np.inf, -np.inf], np.nan, inplace=True)
# 删除任何包含NaN的列
df_clean_cols = df.dropna(axis=1)

同样,若只想删除全为缺失值的列,用:df.dropna(axis=1, how='all')

方法2:布尔索引筛选列

# 筛选每列所有值既不是NaN也不是inf/-inf的列
df_clean_cols = df.loc[:, ~(df.isna().any(axis=0) | df.isin([np.inf, -np.inf]).any(axis=0))]

内容的提问来源于stack exchange,提问作者user288609

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 14:37:17