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
相关产品推荐
相关产品推荐

