如何获取Pandas DataFrame中非float类型的列名列表?
获取DataFrame中非float类型的列名列表
没问题,你已经走了一半啦!要从那个布尔数组拿到对应的列名,其实只需要用布尔索引直接筛选DataFrame的列名就行,这里有几种简单好懂的方法:
方法一:基于你已有的布尔数组改造
你已经生成了categorical这个布尔标记数组,直接用它来索引df.columns就能得到目标列名,最后转成列表就搞定:
import pandas as pd import numpy as np # 假设你的DataFrame已经定义好 categorical_mask = (df.dtypes.values != np.dtype('float64')) non_float_columns = df.columns[categorical_mask].tolist()
解释下:df.columns是所有列名的索引对象,用布尔数组过滤后,.tolist()会把它转成普通的Python列表,这就是你要的结果。
方法二:更简洁的直接判断写法
其实不用绕numpy的dtype,pandas本身支持直接判断列类型,代码更清爽:
non_float_columns = df.columns[df.dtypes != 'float64'].tolist()
方法三:一步到位的优雅写法
还可以用select_dtypes方法直接排除指定类型,可读性拉满:
non_float_columns = df.select_dtypes(exclude=['float64']).columns.tolist()
这个方法直接告诉pandas「排除float64类型的列」,然后取剩下的列名转成列表,新手也能一眼看懂。
举个例子验证
拿个测试DataFrame试试效果:
df = pd.DataFrame({ 'col1': [1,2,3], # int类型 'col2': [1.1,2.2,3.3], # float64类型 'col3': ['a','b','c'], # object类型 'col4': pd.Categorical(['x','y','z']) # 分类类型 }) # 用方法三执行 print(df.select_dtypes(exclude=['float64']).columns.tolist()) # 输出:['col1', 'col3', 'col4']
完全符合预期,拿到了所有非float64的列名。
内容的提问来源于stack exchange,提问作者yogz123
相关产品推荐
相关产品推荐

