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

Pandas如何筛选含NaN的int64/float类型列名

筛选Pandas中带空值的数值列列名

你原有的写法逻辑上可以得到正确结果,但存在类型匹配兼容性差、写法冗余的问题,以下是更稳妥简洁的实现方案:


方案1:官方推荐写法(兼容性最好)

用pandas内置的select_dtypes方法筛选数值列,不用手动硬匹配dtype,可以自动覆盖所有整数、浮点数类型(包括不同位宽的数值类型、pandas可空数值类型):

# 第一步:筛选所有数值类型的列,如果你只需要int64和float类型,可以把参数改成 include=['int64', 'float64']
numeric_df = df.select_dtypes(include="number")
# 第二步:找出数值列中存在至少一个NaN的列名,返回数组格式
target_columns = numeric_df.columns[numeric_df.isna().any()].values

方案2:布尔掩码直接筛选(和原有写法逻辑对齐)

如果你需要严格限定只匹配int64和float类型,可以直接构造两个筛选条件的布尔序列做按位与,不需要先做切片:

import numpy as np
# 条件1:列类型为int64或float
dtype_mask = (df.dtypes == np.int64) | (df.dtypes == np.float_)
# 条件2:列中存在至少一个NaN
nan_mask = df.isna().any()
# 取同时满足两个条件的列名
target_columns = df.columns[dtype_mask & nan_mask].values

注意事项

  • numpy原生的int64类型不支持存储NaN值,如果你的整数列中存在空值,pandas读取CSV时会自动将该列转换为float64类型
  • 如果需要整数列保留整数类型同时存储空值,需要在读取数据时显式指定列类型为pandas可空整数类型Int64(首字母大写)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:39:23