Подтвердить что ты не робот

Pandas - создать объект dtype столбца или фактор

В pandas, как я могу преобразовать столбец DataFrame в объект dtype? Или еще лучше, в какой-то фактор? (Для тех, кто говорит R, в Python, как я as.factor()?)

Кроме того, какая разница между pandas.Factor и pandas.Categorical?

4b9b3361

Ответ 1

Вы можете использовать метод astype для создания серии (один столбец):

df['col_name'] = df['col_name'].astype(object)

Или весь DataFrame:

df = df.astype(object)

Update

Начиная с версии 0.15, вы можете использовать тип данных категории в столбце Series/column:

df['col_name'] = df['col_name'].astype('category')

Примечание. pd.Factor был устаревшим и был удален в пользу pd.Categorical.

Ответ 2

Factor и Categorical совпадают, насколько я знаю. Я думаю, что изначально он назывался Factor, а затем был изменен на категориальный. Чтобы преобразовать в категориальный, возможно, вы можете использовать pandas.Categorical.from_array, что-то вроде этого:

In [27]: df = pd.DataFrame({'a' : [1, 2, 3, 4, 5], 'b' : ['yes', 'no', 'yes', 'no', 'absent']})

In [28]: df
Out[28]: 
   a       b
0  1     yes
1  2      no
2  3     yes
3  4      no
4  5  absent

In [29]: df['c'] = pd.Categorical.from_array(df.b).labels

In [30]: df
Out[30]: 
   a       b  c
0  1     yes  2
1  2      no  1
2  3     yes  2
3  4      no  1
4  5  absent  0

Ответ 3

Также используется функция pd.factorize:

# use the df data from @herrfz

In [150]: pd.factorize(df.b)
Out[150]: (array([0, 1, 0, 1, 2]), array(['yes', 'no', 'absent'], dtype=object))
In [152]: df['c'] = pd.factorize(df.b)[0]

In [153]: df
Out[153]: 
   a       b  c
0  1     yes  0
1  2      no  1
2  3     yes  0
3  4      no  1
4  5  absent  2