Измените все целочисленные столбцы на категории python

#python #pandas

#python #pandas

Вопрос:

Если у меня есть следующие данные:

 import pandas as pd
df = pd.DataFrame({'a' : [0, 1, 1, 1, 0], 'b' : [2,3,4,5,3], 'c': ['a','b','c','d','e']})
df

    a   b   c
0   0   2   a
1   1   3   b
2   1   4   c
3   1   5   d
4   0   3   e
 

Есть ли простой способ превратить все целочисленные столбцы в категории? Я могу сделать:

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

для одного столбца, но как для всех сразу? В R я бы просто сделал:

 df %>% mutate_if(is.integer, as.factor)
 

Ответ №1:

Вы должны сделать:

 df.select_dtypes(include=['int64']).astype('category')
 

Ответ №2:

Можете ли вы попробовать следующее:

 numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
df.select_dtypes(include=numerics).astype('category')
 

Другое решение:

 df._get_numeric_data().astype('category')
 

Комментарии:

1. Он говорит, что все целочисленные столбцы.

2. Я хочу, чтобы были преобразованы только целочисленные столбцы

3. извините, я не полностью прочитал вопрос. Я пересмотрел решение. не могли бы вы проверить

Ответ №3:

Используйте DataFrame.select_dtypes с np.integer для просмотра всех типов целых столбцов и только выбранных столбцов, установленных в category :

 c = df.select_dtypes(np.integer).columns
df[c] = df[c].astype('category')
print (df)
   a  b  c
0  0  2  a
1  1  3  b
2  1  4  c
3  1  5  d
4  0  3  e

print (df.dtypes)
a    category
b    category
c      object
dtype: object