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
相关产品推荐
相关产品推荐

