Как преобразовать категориальную переменную в числовую в Pandas


Вы можете использовать следующий базовый синтаксис для преобразования категориальной переменной в числовую переменную в кадре данных pandas:

df['column_name'] = pd.factorize(df['column_name'])[0]

Вы также можете использовать следующий синтаксис для преобразования каждой категориальной переменной в DataFrame в числовую переменную:

#identify all categorical variables
cat_columns = df.select_dtypes(['object']).columns

#convert all categorical variables to numeric
df[cat_columns] = df[cat_columns].apply ( lambda x: pd.factorize (x)[ 0 ])

В следующих примерах показано, как использовать этот синтаксис на практике.

Пример 1. Преобразование одной категориальной переменной в числовую

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
 'position': ['G', 'G', 'F', 'G', 'F', 'C', 'G', 'F', 'C'],
 'points': [5, 7, 7, 9, 12, 9, 9, 4, 13],
 'rebounds': [11, 8, 10, 6, 6, 5, 9, 12, 10]})

#view DataFrame
df

 team position points rebounds
0 A G  5 11
1 A G  7 8
2 A F  7 10
3 B G  9 6
4 B F  12 6
5 B C  9 5
6 C G  9 9
7 C F  4 12
8 C C  13 10

Мы можем использовать следующий синтаксис для преобразования столбца «команда» в числовой:

#convert 'team' column to numeric
df['team'] = pd.factorize(df['team'])[ 0 ]

#view updated DataFrame
df

 team position points rebounds
0 0 G  5 11
1 0 G  7 8
2 0 F  7 10
3 1 G  9 6
4 1 F  12 6
5 1 C  9 5
6 2 G  9 9
7 2 F  4 12
8 2 C  13 10

Вот как работало преобразование:

  • Каждая команда со значением ' A ' была преобразована в 0 .
  • Каждая команда со значением « B » была преобразована в 1 .
  • Каждая команда со значением ' C ' была преобразована в 2 .

Пример 2. Преобразование нескольких категориальных переменных в числовые

Еще раз предположим, что у нас есть следующий кадр данных pandas:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
 'position': ['G', 'G', 'F', 'G', 'F', 'C', 'G', 'F', 'C'],
 'points': [5, 7, 7, 9, 12, 9, 9, 4, 13],
 'rebounds': [11, 8, 10, 6, 6, 5, 9, 12, 10]})

#view DataFrame
df

 team position points rebounds
0 A G 5 11
1 A G 7 8
2 A F 7 10
3 B G 9 6
4 B F 12 6
5 B C 9 5
6 C G 9 9
7 C F 4 12
8 C C 13 10

Мы можем использовать следующий синтаксис для преобразования каждой категориальной переменной в DataFrame в числовую переменную:

#get all categorical columns
cat_columns = df.select_dtypes(['object']).columns

#convert all categorical columns to numeric
df[cat_columns] = df[cat_columns].apply ( lambda x: pd.factorize (x)[ 0 ])

#view updated DataFrame
df

 team position points rebounds
0 0 0 5 11
1 0 0 7 8
2 0 1 7 10
3 1 0 9 6
4 1 1 12 6
5 1 2 9 5
6 2 0 9 9
7 2 1 4 12
8 2 2 13 10

Обратите внимание, что два категориальных столбца (команда и позиция) были преобразованы в числовые, а столбцы очков и подборов остались прежними.

Примечание.Полную документацию по функции factorize() можно найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

Как преобразовать столбцы Pandas DataFrame в строки
Как преобразовать столбцы Pandas DataFrame в целые числа
Как преобразовать строки в числа с плавающей запятой в Pandas DataFrame

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.