python-.astype(‘categorical’)和`pd.Category(…)`之间的熊猫区别

前端之家收集整理的这篇文章主要介绍了python-.astype(‘categorical’)和`pd.Category(…)`之间的熊猫区别 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个带有字符串列(名称:14)的数据集,我想将其转换为解释为分类特征.据我所知,有两种方法可以做到这一点:@H_404_2@

@H_404_2@

pd.Categorical(data[14])
data[14].astype('category')

虽然这两个结果都具有相同的.dtype:CategoricalDtype(categories = [‘< = 50K','> 50K’],ordered = False),但它们并不相同.@H_404_2@

在结果上调用.describe()会产生不同的输出.第一个输出有关各个类别的信息,而第二个(astype(..))生成典型的描述输出,其中包含count,unique,top,freq和name,并列出dtype:对象.@H_404_2@

我的问题是,为什么/它们有何不同?@H_404_2@

这个数据集:http://archive.ics.uci.edu/ml/datasets/Adult@H_404_2@

@H_404_2@

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:@H_404_2@

@H_404_2@

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.@H_404_2@

每当调用Categorical.describe()时,您都会获得每个类别的计数和频率:@H_404_2@

@H_404_2@

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在这里也具有不同的含义:@H_404_2@

@H_404_2@

In [175]: ser.describe()
Out[175]: 
count      32561
unique         2
top        <=50K
freq       24720
Name: 14,dtype: object

猜你在找的Python相关文章