as.type('类别')没有从' float64'

时间:2017-10-23 15:44:41

标签: python pandas dataframe categorical-data one-hot-encoding

我尝试将数据帧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()

产量

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()

产量

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

预期输出:我使用正确的代码(我试图弄清楚)将列的数据类型转换为类别后,我想要df[0].describe()显示类似

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

我想我知道自己哪里出错了。当我转换为分类数据类型时,我觉得我需要明确提到不同的类别或不同的级别。如果你能指出我正确的方向做这件事,我会很高兴。

每个具有object数据类型的列都可以被视为category数据类型吗?如果您能突出显示“对象”之间的一些主要差异,将会很有帮助。数据类型和'类别'。

此外,在为机器学习实现单热编码时,我理解,它用于将分类功能转换为数字功能,因此您可以将它们插入到sci-kit中。那么(用更正式的术语)这是否意味着,单热编码有助于将objectcategory的数据类型转换为int64数据类型?

从评论中解决的问题:输入df [0]和df [0] .describe()之间存在差异,只需打印df[0]显示的数据类型为{{1} },而category将其显示为int64。

1 个答案:

答案 0 :(得分:0)

键入然后向下滚动

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]

根据我的理解,不同的基础:categroy将继续保持原始级别,当您执行某些数据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]
df1
Out[953]: 
   0
2  2


df1[0].value_counts()

Out[954]: 
2    1
3    0
1    0