问题描述
我想找出数据框的哪些列是分类的。 这个数据框确实有 z 列,但我的代码无法检测到它并打印一个空列表。 我该如何解决?
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
data=[[ 10,10,'a'],[ 15,15,[ 14,14,'b'],[16,16,[19,19,[17,17,[6,6,'c'],[5,5,[20,20,[22,22,[21,21,[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')
解决方法
这里似乎有问题的是您的测试 if (type(df[i].all()))==str
,让我们分解它:
- 获取列
i
- 检查该列的所有值是否都为
True
,请参阅 the doc for.all()
Series.all(axis=0,bool_only=None,skipna=True,level=None,**kwargs)
返回是否所有元素都为 True,可能在一个轴上。
除非在系列中或沿 Dataframe 轴至少有一个元素为 False 或等效(例如零或空),否则返回 True。
- 获取返回类型
- 检查此类型是否为
str
您似乎想检查列的数据类型。为此,请使用 dtypes
>>> df.dtypes
x int64
y int64
z object
您甚至可以直接从数据框中select dtypes:
>>> 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']