我有一个带有字符串列(名称:14)的数据集,我想将其转换为解释为分类特征.据我所知,有两种方法可以做到这一点:
pd.Categorical(data[14])
data[14].astype('category')
虽然这两个结果都具有相同的.dtype:CategoricalDtype(categories = [‘< = 50K','> 50K’],ordered = False),但它们并不相同.
在结果上调用.describe()会产生不同的输出.第一个输出有关各个类别的信息,而第二个(astype(..))生成典型的描述输出,其中包含count,unique,top,freq和name,并列出dtype:对象.
我的问题是,为什么/它们有何不同?
这个数据集: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
最佳答案
作为Bakuriu points out,type(pd.Categorical(data [14]))是Categorical,而
type(data [14] .astype(‘category’))是Series:
原文链接:https://www.f2er.com/python/533189.htmltype(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()时,您都会获得每个类别的计数和频率:
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