如何移除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
相关产品推荐
相关产品推荐

