as.type('category') не приводит к желаемому изменению типа данных с 'float64'

Я пытаюсь преобразовать определенный столбец фрейма данных df в категориальный тип данных! или то, что R Programming называет 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? Было бы полезно, если бы вы могли выделить некоторые основные различия между типом данных «объект» и «категория».

Кроме того, я понимаю, что при внедрении горячего кодирования для машинного обучения оно используется для преобразования категориальных функций в числовые, чтобы вы могли подключить их к научному обучению. Итак (в более формальном смысле) означает ли это, что горячее кодирование поможет преобразовать тип данных object или category в тип данных int64?

ВОПРОС РЕШЕН из комментариев: существует разница между вводом df[0] и df[0].describe(), простая печать df[0] отображает тип данных как category, а df[0].describe() показывает его как int64.


person Community    schedule 23.10.2017    source источник
comment
если вы наберете df[0] и прокрутите вниз, вы увидите то, что вам нужно   -  person BENY    schedule 23.10.2017
comment
Это смущает.. Почему df[0].describe() в конечном итоге отображает что-то другое.. Неважно. Я такой нуб.   -  person    schedule 23.10.2017
comment
Вам все еще нужно, чтобы я объяснил, в чем разница между cate и object?   -  person BENY    schedule 23.10.2017
comment
Я хотел бы знать эту часть! Все, что я знаю, это то, что тип данных object является своего рода типом данных, в котором столбец может иметь смесь типов данных string или int. Опубликуйте это в ответах, чтобы я мог решить это ..   -  person    schedule 23.10.2017
comment
Можешь проверить ~ :-)   -  person BENY    schedule 23.10.2017


Ответы (1)


Введите его, затем прокрутите вниз

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]

Насколько я понимаю, другая база: category будет продолжаться на исходном уровне, и это хороший трюк, когда вы делаете некоторые данные 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
person BENY    schedule 23.10.2017