Pandas判断dtype时category与float64表现不同的原因是什么
问题产生原因
df[i].dtypes返回的是dtype类型对象而非纯字符串,两类数据类型的底层实现差异导致了报错:
- float64属于numpy原生支持的数值类型,numpy的dtype对象在和字符串做相等判断、
in匹配时,内部做了兼容隐式转换,所以df[i].dtypes in ['float64']可以正常运行。 - category是Pandas自定义的扩展数据类型,不属于numpy原生的dtype识别范围,在对应版本的运行环境中,Pandas的CategoricalDtype对象和字符串
'category'做in列表匹配时,numpy底层的类型校验逻辑无法识别该自定义类型,直接抛出TypeError。
可行的替代写法
写法1:先转字符串再判断
for i in df.columns: if str(df[i].dtype) == 'category': print(i)
写法2:用Pandas官方类型校验API(兼容性最高)
import pandas as pd for i in df.columns: if pd.api.types.is_categorical_dtype(df[i]): print(i)
写法3:直接用内置类型筛选(无需手动循环)
# 直接获取所有分类类型列名 cat_cols = df.select_dtypes(include='category').columns.tolist() # 直接获取所有数值类型列名 num_cols = df.select_dtypes(include='number').columns.tolist()
内容的提问来源于stack exchange,提问作者EBDS
相关产品推荐
相关产品推荐

