Pandas - converter valores categóricos em valores int

Pandas - converter valores categóricos em valores int

Os conjuntos de dados para execução de aprendizado de máquina incluem variáveis ​​numéricas e categóricas. Variáveis ​​categóricas são dados do tipo string que os humanos compreendem facilmente. Máquinas, por outro lado, não conseguem entender as entradas categóricas diretamente. Consequentemente, o conteúdo categórico deve ser transformado em valores numéricos que as máquinas podem interpretar.

Neste tutorial, discutiremos três maneiras diferentes de converter valores categóricos em valores numéricos no quadro de dados de pandas

Abordagem 1: Usando Substituir ()

No python, substituir () é usado para alterar ou converter os valores fornecidos em novos valores que especificamos. Para substituir vários valores, precisamos passar duas listas como parâmetros. A primeira lista armazenará os valores reais a serem substituídos e a segunda lista armazenará os valores que substituem os valores na primeira lista.

Sintaxe

Dataframe_object ['colun'] = dataframe_object ['coluna']].substitua ([value1, value2,…], [value1, value2,…])

Aqui, a coluna é o nome da coluna em que estamos substituindo os valores.

Considere o DataFrame

Vamos criar o quadro de dados de pandas nomeado conjuntos que seguram 4 colunas com 10 linhas.

# Importe o quadro de dados do módulo Pandas
De Pandas Importar DataFrame
# Crie um DataFrame com 10 linhas que possuem 4 colunas
Sets = DataFrame ('Code': [1,2,3,4,5,6,7,8,9,0],
'prioridade': ['alta', 'baixa', 'baixa', 'alta', 'média', 'alta', 'médio', 'baixa', 'alta', 'média'],
'gênero': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Idade': [12,23,21,34,21,23,21,34,56,32])
# DataFrame real
Imprimir (conjuntos)
# Exibir tipos de dados de cada coluna
Imprimir (conjuntos.dtypes)

Saída

Código Prioridade de gênero Idade
0 1 High M 12
1 2 M 23 baixo
2 3 Baixo M 21
3 4 High F 34
4 5 Médio M 21
5 6 High M 23
6 7 Médio F 21
7 8 Low F 34
8 9 High M 56
9 0 Médio F 32
Código Int64
objeto prioritário
objeto de gênero
Idade INT64
dtype: objeto

Vemos duas colunas com o tipo categórico (objeto), i.e., prioridade e gênero.

Portanto, precisamos convertê -los em valores numéricos/inteiros.

Exemplo 1

Vamos substituir os valores na coluna de gênero usando o método replate ().

# Importe o quadro de dados do módulo Pandas
De Pandas Importar DataFrame
# Crie um DataFrame com 10 linhas que possuem 4 colunas
Sets = DataFrame ('Code': [1,2,3,4,5,6,7,8,9,0],
'prioridade': ['alta', 'baixa', 'baixa', 'alta', 'média', 'alta', 'médio', 'baixa', 'alta', 'média'],
'gênero': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Idade': [12,23,21,34,21,23,21,34,56,32])
# Converter valores categóricos em valores numéricos na coluna de gênero
Sets ['gênero'] = Sets ['gênero'].substitua (['m', 'f'], [1, 2])
Imprimir (conjuntos)

Saída

Código Prioridade de gênero Idade
0 1 High 1 12
1 2 Low 1 23
2 3 Low 1 21
3 4 High 2 34
4 5 Médio 1 21
5 6 High 1 23
6 7 Médio 2 21
7 8 Low 2 34
8 9 High 1 56
9 0 Médio 2 32

Explicação

Estamos substituindo 'm' por 1 e 'f' por 2 e armazenando os valores da coluna novamente na coluna de gênero. Podemos ver que a coluna de gênero possui valores dentro de 1 ou 2.

Exemplo 2

Vamos substituir os valores na coluna prioritária usando o método replate ().

# Importe o quadro de dados do módulo Pandas
De Pandas Importar DataFrame
# Crie um DataFrame com 10 linhas que possuem 4 colunas
Sets = DataFrame ('Code': [1,2,3,4,5,6,7,8,9,0],
'prioridade': ['alta', 'baixa', 'baixa', 'alta', 'média', 'alta', 'médio', 'baixa', 'alta', 'média'],
'gênero': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Idade': [12,23,21,34,21,23,21,34,56,32])
# Converter valores categóricos em valores numéricos na coluna prioritária
Sets ['Priority'] = Sets ['Priority'].Substitua (['Low', 'Medium', 'High'], [0,1,2])
Imprimir (conjuntos)

Saída

Código Prioridade de gênero Idade
0 1 2 m 12
1 2 0 m 23
2 3 0 m 21
3 4 2 F 34
4 5 1 m 21
5 6 2 m 23
6 7 1 F 21
7 8 0 F 34
8 9 2 m 56
9 0 1 F 32

Explicação

Existem três categorias na coluna prioritária. Eles são 'baixos', 'altos' e 'médios'. Estamos substituindo 'Low' por 0, 'médio' por 1 e 'alto' por 2 e armazenando os valores da coluna novamente na coluna prioritária.

Abordagem 2: Usando Aplicar (fatorize ())

O outro método que os pandas nos forneceram é o 'DataFrame.Aplicar () 'Função para converter todos os valores categóricos em números inteiros.

Para converter várias colunas categóricas em números inteiros, seguimos esta técnica:

  1. Temos que selecionar todas as colunas que contêm dados de dados do objeto, empregando o DataFrame do Pandas.select_dtypes ().Método das colunas.
  2. Para converter essas colunas em números inteiros, temos que usar o quadro de dados dos pandas.aplicar () 'com os' pandas.Método de fator () '.

O método da fatoração aceitará um valor com um tipo de dados 'objeto' e o converterá em 'int'.

Se você deseja converter apenas os valores categóricos de uma coluna específica em números inteiros, aplicar () não é usado.

Sintaxe para coluna única

Dataframe_object ['coluna'] = pandas.fatorize (dataframe_object ['coluna']) [0]

Sintaxe para todas as colunas

Dataframe_object [dataframe_object.select_dtypes (['objeto']).colunas] = dataframe_object [dataframe_object.select_dtypes (['objeto']).colunas].Aplicar (Lambda X: Pandas.fature (x) [0])

Observação: A substituição começará a partir de 0.

Exemplo 1: Substitua os valores categóricos de coluna única

Vamos substituir os valores na coluna de gênero usando o método fatalize ().

# Importe o quadro de dados do módulo Pandas
De Pandas Importar DataFrame
Importar pandas
# Crie um DataFrame com 10 linhas que possuem 4 colunas
Sets = DataFrame ('Code': [1,2,3,4,5,6,7,8,9,0],
'prioridade': ['alta', 'baixa', 'baixa', 'alta', 'média', 'alta', 'médio', 'baixa', 'alta', 'média'],
'gênero': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Idade': [12,23,21,34,21,23,21,34,56,32])
# Converter valores categóricos para números inteiros usando o método fatorize () presente na coluna de gênero
Conjuntos ['gênero'] = pandas.fatorizar (conjuntos ['gênero']) [0]
# DataFrame real
Imprimir (conjuntos)

Saída

Código Prioridade de gênero Idade
0 1 High 0 12
1 2 Low 0 23
2 3 Low 0 21
3 4 High 1 34
4 5 Médio 0 21
5 6 High 0 23
6 7 Médio 1 21
7 8 Low 1 34
8 9 High 0 56
9 0 Médio 1 32

Explicação

Estamos substituindo 'm' por 0 e 'f' por 1 e armazenando os valores da coluna novamente na coluna de gênero. Agora, podemos ver que a coluna de gênero possui valores dentro de 0 ou 1.

Exemplo 2: substitua todos os valores categóricos da coluna

Vamos substituir os valores em todas as colunas usando o método Aplicar (fatorize ()).

# Importe o quadro de dados do módulo Pandas
De Pandas Importar DataFrame
Importar pandas
# Crie um DataFrame com 10 linhas que possuem 4 colunas
Sets = DataFrame ('Code': [1,2,3,4,5,6,7,8,9,0],
'prioridade': ['alta', 'baixa', 'baixa', 'alta', 'média', 'alta', 'médio', 'baixa', 'alta', 'média'],
'gênero': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Idade': [12,23,21,34,21,23,21,34,56,32])
# Substitua todos os valores categóricos de coluna
conjuntos [conjuntos.select_dtypes (['objeto']).colunas] = conjuntos [conjuntos.select_dtypes (['objeto']).colunas].Aplicar (Lambda X: Pandas.fature (x) [0])
Imprimir (conjuntos)

Saída

Código Prioridade de gênero Idade
0 1 0 0 12
1 2 1 0 23
2 3 1 0 21
3 4 0 1 34
4 5 2 0 21
5 6 0 0 23
6 7 2 1 21
7 8 1 1 34
8 9 0 0 56
9 0 2 1 32

Explicação

Podemos ver a seguir:

  1. Na coluna de gênero, 'm' é substituído por 0 e 'f' é substituído por 1.
  2. A coluna prioritária, 'High' é substituída por 0, 'Low' é substituída por 1, e 'Médio' é substituído por 2.

Até agora, vimos a substituição de valores categóricos por valores inteiros em colunas únicas ou todas as categóricas conhecidas. Suponha que exista um conjunto de dados enorme com mais de um lakh registros. Como substituir os valores categóricos?

A solução é a codificação do rótulo.

Vamos discutir esta abordagem.

Abordagem 3: Usando o LabelEncoding

LABELENCODER () é o método presente dentro do módulo Sklearn, que converterá valores categóricos de uma coluna específica em um número inteiro. Não precisamos especificar os valores categóricos.

O método fit_transform () é usado junto com LABELENCODER () que se encaixa nos valores transformados.

Nesta técnica, os valores substituídos começam de 0 e a substituição é feita em ordem alfabética dos valores categóricos.

Sintaxe

Dataframe_object ['colun'] = LabelEncoder ().fit_transform (dataframe_object ['coluna'])

Aqui, a coluna é o nome da coluna em que estamos substituindo os valores.

Exemplo

Vamos substituir os valores no gênero, colunas prioritárias usando a seguinte abordagem:

# Importe o quadro de dados do módulo Pandas
De Pandas Importar DataFrame
Importar pandas
# Importar LabelEncoder do módulo Sklearn
de Sklearn.Pré -processamento de importação LabelEncoder
# Crie um DataFrame com 10 linhas que possuem 4 colunas
Sets = DataFrame ('Code': [1,2,3,4,5,6,7,8,9,0],
'prioridade': ['alta', 'baixa', 'baixa', 'alta', 'média', 'alta', 'médio', 'baixa', 'alta', 'média'],
'gênero': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Idade': [12,23,21,34,21,23,21,34,56,32])
# Converter valores categóricos da coluna de gênero em numérico
Sets ['gênero'] = LabelEncoder ().fit_transform (sets ['gênero'])
# Converter valores categóricos da coluna prioritária para numérico
Sets ['Priority'] = LabelEncoder ().FIT_TRANSFORM (Sets ['Priority']))
Imprimir (conjuntos)

Saída

Código Prioridade de gênero Idade
0 1 0 1 12
1 2 1 1 23
2 3 1 1 21
3 4 0 0 34
4 5 2 1 21
5 6 0 1 23
6 7 2 0 21
7 8 1 0 34
8 9 0 1 56
9 0 2 0 32

Explicação

  1. Estamos substituindo 'm' por 1 e 'f' por 2 e armazenando os valores da coluna novamente na coluna de gênero. Agora, podemos ver que a coluna de gênero possui valores dentro de 1 ou 2.
  2. Existem três categorias na coluna prioritária. Eles são 'baixos', 'altos' e 'médios'. Estamos substituindo 'Low' por 0, 'médio' por 1 e 'alto' por 2 e armazenando os valores da coluna novamente na coluna prioritária.

Conclusão

Nosso guia gira em torno da conversão de valores categóricos em valores numéricos para que eles possam ser tornados compreensíveis pelas máquinas, pois o tipo de dados do objeto não pode ser processado por eles. Nós apresentamos você às três abordagens apresentadas pela biblioteca "pandas" para obter o tipo de dados necessário. Lembre -se, você deve usar a abordagem de codificação de gravadores, pois não sabe quantas categorias estão presentes na coluna do quadro de dados do pandas.