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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:27:03