Pandas使用dtype筛选数值列无法匹配int64、float64类型问题
错误原因
原有代码使用b[i].dtypes in ["int", "float"]做判断时,本质是将列的dtype对象和字符串做精确等值匹配。Pandas中不同位宽的数值类型对应的类型标识是带位宽后缀的(如int64、float64),和纯字符串"int"、"float"无法等值匹配,因此会漏匹配高位宽的数值列。手动枚举所有位宽类型的写法维护性差,也无法覆盖后续新增的可空数值类型(如pandas的Int64、Float32可空类型)。
推荐解决方案
方法1:使用pandas原生API(最稳妥)
pandas自带的select_dtypes方法原生支持用类型简写匹配整类数值类型,无需枚举位宽,会自动覆盖所有位宽的整数、浮点列,也兼容可空数值类型:
# 直接筛选所有整数、浮点类型的列名,返回列表格式 a = b.select_dtypes(include=["int", "float"]).columns.tolist()
方法2:手动判断时使用dtype的kind属性
如果需要自定义列表推导逻辑,不要做字符串等值匹配,而是取dtype的kind属性做判断:所有有符号整数类型的kind值统一为'i',所有浮点类型的kind值统一为'f',和位宽无关:
# 如需包含无符号整数,可将'u'加入判断元组 a = [i for i in b.columns if b[i].dtype.kind in ("i", "f")]
注意:不要用
str(b[i].dtype).contains("int")这类子串匹配的写法,容易误判名称中带int/float字样的非数值类型,稳定性差。
内容的提问来源于stack exchange,提问作者Furkan
相关产品推荐
相关产品推荐

