python:未检测到的分类值

gdx19jrr  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(353)

我想找出 Dataframe 的哪些列是分类的。这个 Dataframe 确实有z列,但我的代码无法检测到它并打印一个空列表。我该怎么修?

import matplotlib.pyplot as plt
import numpy as np
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'])
categorical_values=[]
for i in df.columns.values.tolist():
    if (type(df[i].all()))==str:
        categorical_values.append(i)

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

cnjp1d6j1#

这里有什么不对劲吗 if (type(df[i].all()))==str ,让我们分解它:
获取列 i 检查该列的所有值是否为 True ,有关详细信息,请参阅文档 .all() 系列。全部(轴=0,仅布尔_=无,skipna=真,级别=无,**kwargs)
返回是否所有元素都为真,可能在轴上。
返回true,除非序列中或 Dataframe 轴上至少有一个元素为false或等效元素(例如零或空)。
获取返回类型
检查此类型是否正确 str 还是不
您似乎想要检查列的数据类型。为此,请使用 dtypes ```

df.dtypes
x int64
y int64
z object

您甚至可以直接从 Dataframe 中选择数据类型:

df.select_dtypes(include=['object'])
z
0 a
1 a
2 b
3 b
4 a
5 a
6 c
7 b
8 c
9 c
10 b
11 a
categorical_values = df.select_dtypes(include=['object']).columns.to_list()
categorical_values
['z']

相关问题