我有一个带有字符串列(名称:14)的数据集,我想将其转换为解释为分类特征。据我所知,有两种方法可以做到这一点:
pd.Categorical(data[14])
data[14].astype('category')
尽管两者产生的结果都相同,.dtype
:CategoricalDtype(categories=[' <=50K', ' >50K'], ordered=False)
却并不相同。
在结果上调用.describe()
会产生不同的输出。第一个输出有关各个类别的信息,而第二个(astype(..)
)产生典型的描述输出,其中包含计数,唯一,顶部,频率和名称,并列出dtype: object
。
那么我的问题是,为什么/它们有何不同?
这是数据集:http://archive.ics.uci.edu/ml/datasets/Adult
data = pd.read_csv("./adult/adult.data", header=None)
pd.Categorical(data[14]).describe()
data[14].astype('category').describe()
pd.Categorical(data[14]).dtype
data[14].astype('category').dtype
答案 0 :(得分:2)
与Bakuriu points out一样,type(pd.Categorical(data[14]))
为Categorical
,而
type(data[14].astype('category'))
是Series
:
import pandas as pd
data = pd.read_csv("./adult/adult.data", header=None)
cat = pd.Categorical(data[14])
ser = data[14].astype('category')
print(type(cat))
# pandas.core.arrays.categorical.Categorical
print(type(ser))
# pandas.core.series.Series
describe()
的行为不同
因为Categorical.describe
的定义与Series.describe
的定义不同。
每当您致电Categorical.describe()
时,每个类别都会得到count
和freq
:
In [174]: cat.describe()
Out[174]:
counts freqs
categories
<=50K 24720 0.75919
>50K 7841 0.24081
,并且每当您在分类系列you'll get count
, unique
, top
and freq
上致电Series.describe()
时。请注意,count
和freq
在这里也有不同的含义:
In [175]: ser.describe()
Out[175]:
count 32561
unique 2
top <=50K
freq 24720
Name: 14, dtype: object