as.type('category')没有得到想要的数据类型,从'float64'变成了'float64'。

0 人关注

我试图将数据框架的某一列 df 转换为分类数据类型!或者R编程中所说的 factor

import pandas as pd
import numpy as np
df = pd.DataFrame(data=np.array([[1,1,2,2,3,3]]))
df = df.T
df[0].describe()

yields

count    6.000000
mean     2.000000
std      0.894427
min      1.000000
25%      1.250000
50%      2.000000
75%      2.750000
max      3.000000
Name: 0, dtype: float64

在我转换为'类别'之后

df[0] = df[0].astype('category')
df[0].describe()

yields

count     6
unique    3
top       3
freq      2
Name: 0, dtype: int64

Expected Output:在我通过使用正确的代码(我正在努力弄清楚)将某一列的数据类型转换为一个类别后,我希望df[0].describe()能显示如下内容

dtype: category
Categories (3, object): [1, 2, 3]

我想我有点知道我在哪里出了问题。我觉得我需要在转换为分类数据类型时明确提到不同的类别或不同的级别。如果你能给我指出这样做的正确方向,我将非常高兴。

是否每一个具有object数据类型的列都可以被认为是一个category数据类型?如果你能强调 "对象 "数据类型和 "类别 "之间的一些主要区别,将会很有帮助。

另外,在为机器学习实现一键编码时,我了解到,它是用来将分类特征转换为数字特征的,因此你可以将它们插入 sci-kit learn。那么(用更正式的术语来说),这是否意味着,一键编码将有助于把objectcategory的数据类型转换为int64的数据类型?

QUESTION RESOLVED from comments:输入df[0]和df[0].describe()有区别,简单的打印df[0]显示数据类型为category,而,df[0].describe()显示为int64。

5 个评论
BENY
如果你输入 df[0] 并向下滚动,你会看到你需要的东西。
这就很尴尬了。为什么,df[0].describe()最后显示的是不同的东西。无所谓了。我真是个傻瓜。
BENY
你还需要我提供我对 "对象 "和 "条件 "的不同的理解吗?
我想知道这部分!我所知道的是,数据类型 object 是一种数据类型,其中一个列可能有 string int 的混合数据类型。把它贴在答案上,这样我就可以解决它。
BENY
你可以查看一下~ :-)
python
pandas
dataframe
categorical-data
one-hot-encoding
user8508347
发布于 2017-10-23
1 个回答
BENY
BENY
发布于 2017-10-24
已采纳
0 人赞同

Type it then scroll down

df[0]
Out[942]: 
0    1
1    1
2    2
3    2
4    3
5    3
Name: 0, dtype: category
Categories (3, int64): [1, 2, 3]

我的理解是,不同的基础。替换代码1】会延续原来的水平,当你做一些数据slice时,这是一个很好的技巧。但你不想保留value,但你想在输出中保留level

改为category之前。

df[0].value_counts()
Out[947]: 
3    2
2    2
1    2
Name: 0, dtype: int64
df1=df.iloc[2:3]
df1[0].value_counts()
Out[956]: 
2    1
Name: 0, dtype: int64

改为类别后。

df[0] = df[0].astype('category')
df1=df.iloc[2:3]
Out[953]: 
df1[0].value_counts()