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

Pandas无法检测DataFrame分类列z输出空列表如何修复

Pandas分类列识别问题修复

错误原因

你原代码的判断逻辑存在根本性错误:

  • df[i].all()的作用是检查当前列所有元素的布尔值是否均为真,返回结果是布尔类型值,因此type(df[i].all())的结果永远是bool,不可能匹配str,自然无法筛选出分类列。

修复方案

方案1:直接筛选object类型列(适用90%以上字符串分类场景)

Pandas中字符串值默认存储为object数据类型,直接使用select_dtypes方法筛选即可:

import pandas as pd

data=[[ 10,10,'a'],
    [ 15,15,'a'],
    [ 14,14,'b'],
    [16,16,'b'],
    [ 19,19,'a'],
    [ 17,17,'a'],
    [6,6,'c'],
    [5,5,'b'],
    [20,20,'c'],
    [22,22,'c'],
    [21,21,'b'],
    [18,45 ,'a']]
df = pd.DataFrame(data, columns=['x','y','z'])
# 筛选object类型列
categorical_values = df.select_dtypes(include=['object']).columns.tolist()

print(categorical_values, 'CATEGORICAL VALUES')
print(len(categorical_values),'total of categorical variables')

运行输出:

['z'] CATEGORICAL VALUES
1 total of categorical variables

方案2:筛选Pandas专属category类型列

如果你的分类列是通过astype('category')显式转换的Pandas分类类型,将筛选参数调整为category即可:

categorical_values = df.select_dtypes(include=['category']).columns.tolist()

方案3:严格校验列全为字符串类型

如果需要确认列中所有元素均为字符串类型,可使用以下写法:

categorical_values = [col for col in df.columns if df[col].apply(lambda x: isinstance(x, str)).all()]

内容的提问来源于stack exchange,提问作者etckml

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 20:00:01