Pandas convierta los valores categóricos a valores int

Pandas convierta los valores categóricos a valores int

Los conjuntos de datos para la ejecución del aprendizaje automático incluyen variables numéricas y categóricas. Las variables categóricas son datos de tipo cadena que los humanos comprenden fácilmente. Las máquinas, por otro lado, no pueden entender las entradas categóricas directamente. En consecuencia, el contenido categórico debe transformarse en valores numéricos que las máquinas puedan interpretar.

En este tutorial, discutiremos tres formas diferentes de convertir valores categóricos a valores numéricos en Pandas DataFrame

Enfoque 1: Uso de reemplazo ()

En Python, reemplazar () se usa para cambiar o convertir los valores dados en nuevos valores que especificamos. Para reemplazar múltiples valores, necesitamos pasar dos listas como parámetros. La primera lista almacenará los valores reales a reemplazar, y la segunda lista almacenará los valores que reemplazan los valores en la primera lista.

Sintaxis

DataFrame_Object ['columna'] = dataFrame_Object ['columna'].Reemplazar ([Value1, Value2, ...], [Value1, Value2, ...])

Aquí, la columna es el nombre de la columna en la que estamos reemplazando los valores.

Considere DataFrame

Creemos el marcado de datos de Pandas con nombre sets que sostienen 4 columnas con 10 filas.

# Importar el DataFrame desde el módulo pandas
Desde Pandas Import DataFrame
# Crear un marco de datos con 10 filas que contienen 4 columnas
sets = dataFrame ('código': [1,2,3,4,5,6,7,8,9,0],
'Prioridad': ['alto', 'bajo', 'bajo', 'alto', 'medio', 'alto', 'medio', 'bajo', 'alto', 'medio'],
'Género': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Edad': [12,23,21,34,21,23,21,34,56,32])
#Frame de datos real
Imprimir (conjuntos)
# Muestra los tipos de datos de cada columna
Imprimir (conjuntos.dtypes)

Producción

edad de género prioritario del código
0 1 alto M 12
1 2 bajo m 23
2 3 bajo m 21
3 4 High F 34
4 5 Medio M 21
5 6 High M 23
6 7 Medio F 21
7 8 bajo F 34
8 9 High M 56
9 0 Medio F 32
código int64
objeto prioritario
objeto de género
edad int64
dtype: objeto

Vemos dos columnas con el tipo categórico (objeto), i.mi., prioridad y género.

Por lo tanto, necesitamos convertirlos en valores numéricos/enteros.

Ejemplo 1

Reemplacemos los valores en la columna de género usando el método reemplazar ().

# Importar el DataFrame desde el módulo pandas
Desde Pandas Import DataFrame
# Crear un marco de datos con 10 filas que contienen 4 columnas
sets = dataFrame ('código': [1,2,3,4,5,6,7,8,9,0],
'Prioridad': ['alto', 'bajo', 'bajo', 'alto', 'medio', 'alto', 'medio', 'bajo', 'alto', 'medio'],
'Género': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Edad': [12,23,21,34,21,23,21,34,56,32])
# Convertir valores categóricos a valores numéricos en la columna de género
Sets ['género'] = sets ['género'].reemplazar (['m', 'f'], [1, 2])
Imprimir (conjuntos)

Producción

edad de género prioritario del código
0 1 alto 1 12
1 2 bajo 1 23
2 3 bajo 1 21
3 4 High 2 34
4 5 Medio 1 21
5 6 High 1 23
6 7 Medio 2 21
7 8 bajo 2 34
8 9 High 1 56
9 0 Medium 2 32

Explicación

Estamos reemplazando 'M' con 1 y 'F' con 2 y almacenamos los valores de la columna nuevamente en la columna de género. Podemos ver que la columna de género contiene valores dentro de 1 o 2.

Ejemplo 2

Reemplacemos los valores en la columna de prioridad usando el método reemplazar ().

# Importar el DataFrame desde el módulo pandas
Desde Pandas Import DataFrame
# Crear un marco de datos con 10 filas que contienen 4 columnas
sets = dataFrame ('código': [1,2,3,4,5,6,7,8,9,0],
'Prioridad': ['alto', 'bajo', 'bajo', 'alto', 'medio', 'alto', 'medio', 'bajo', 'alto', 'medio'],
'Género': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Edad': [12,23,21,34,21,23,21,34,56,32])
# Convertir valores categóricos a valores numéricos en la columna de prioridad
Sets ['priority'] = sets ['priority'].reemplazar (['bajo', 'medio', 'alto'], [0,1,2])
Imprimir (conjuntos)

Producción

edad de género prioritario del código
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

Explicación

Hay tres categorías en la columna de prioridad. Son 'bajos', 'altos' y 'medianos'. Estamos reemplazando 'bajo' con 0, 'medio' con 1 y 'alto' con 2 y almacenando los valores de la columna nuevamente en la columna de prioridad.

Enfoque 2: Uso de Aplicar (factorize ())

El otro método que Pandas nos proporcionó es el 'DataFrame.Aplicar () 'función para convertir todos los valores categóricos en enteros.

Para convertir múltiples columnas categóricas en enteros, hemos seguido esta técnica:

  1. Tenemos que seleccionar todas las columnas que contienen el tipo de datos de objetos empleando el marco de datos de los pandas.select_dtypes ().Método de columnas.
  2. Para convertir estas columnas en enteros, tenemos que usar el marco de datos de los pandas.aplicar () 'con los' pandas.método factorize () '.

El método Factorize tomará un valor con un tipo de datos de 'objeto' y lo convertirá en 'int'.

Si desea convertir solo los valores categóricos de una columna en particular a enteros, entonces aplicar () no se usa.

Sintaxis para una sola columna

DataFrame_Object ['columna'] = pandas.factorize (dataFrame_Object ['columna']) [0]

Sintaxis para todas las columnas

DataFrame_Object [dataFrame_Object.select_dtypes (['objeto']).columnas] = dataFrame_Object [dataFrame_Object.select_dtypes (['objeto']).columnas].Aplicar (Lambda X: Pandas.factorize (x) [0])

Nota: El reemplazo comenzará desde 0.

Ejemplo 1: Reemplace los valores categóricos de una sola columna

Reemplacemos los valores en la columna de género usando el método factorize ().

# Importar el DataFrame desde el módulo pandas
Desde Pandas Import DataFrame
importación de pandas
# Crear un marco de datos con 10 filas que contienen 4 columnas
sets = dataFrame ('código': [1,2,3,4,5,6,7,8,9,0],
'Prioridad': ['alto', 'bajo', 'bajo', 'alto', 'medio', 'alto', 'medio', 'bajo', 'alto', 'medio'],
'Género': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Edad': [12,23,21,34,21,23,21,34,56,32])
# Convertir valores categóricos a enteros usando el método Factorize () presente en la columna de género
establece ['género'] = pandas.factorize (conjuntos ['género']) [0]
#Frame de datos real
Imprimir (conjuntos)

Producción

edad de género prioritario del código
0 1 alto 0 12
1 2 bajo 0 23
2 3 bajo 0 21
3 4 alto 1 34
4 5 Medio 0 21
5 6 alto 0 23
6 7 Medio 1 21
7 8 bajo 1 34
8 9 alto 0 56
9 0 Medio 1 32

Explicación

Estamos reemplazando 'M' con 0 y 'F' con 1 y almacenamos los valores de la columna nuevamente en la columna de género. Ahora, podemos ver que la columna de género contiene valores dentro de 0 o 1.

Ejemplo 2: Reemplace todos los valores categóricos de la columna

Reemplacemos los valores en todas las columnas utilizando el método Aplicar (factorize ()).

# Importar el DataFrame desde el módulo pandas
Desde Pandas Import DataFrame
importación de pandas
# Crear un marco de datos con 10 filas que contienen 4 columnas
sets = dataFrame ('código': [1,2,3,4,5,6,7,8,9,0],
'Prioridad': ['alto', 'bajo', 'bajo', 'alto', 'medio', 'alto', 'medio', 'bajo', 'alto', 'medio'],
'Género': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Edad': [12,23,21,34,21,23,21,34,56,32])
# Reemplazar todos los valores categóricos de la columna
Conjuntos [Conjuntos.select_dtypes (['objeto']).columnas] = conjuntos [conjuntos.select_dtypes (['objeto']).columnas].Aplicar (Lambda X: Pandas.factorize (x) [0])
Imprimir (conjuntos)

Producción

edad de género prioritario del código
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

Explicación

Podemos ver en el siguiente:

  1. En la columna de género, 'M' se reemplaza con 0, y 'F' se reemplaza con 1.
  2. La columna de prioridad, 'alto' se reemplaza con 0, 'bajo' se reemplaza con 1 y 'medio' se reemplaza con 2.

Hasta ahora, hemos visto el reemplazo de valores categóricos a valores enteros en columnas individuales o todas con valores categóricos conocidos. Supongamos que hay un gran conjunto de datos con más de un lakh Records. Cómo reemplazar los valores categóricos?

La solución es la codificación de la etiqueta.

Discutamos este enfoque.

Enfoque 3: Uso de LabelEncoding

LabelEncoder () es el método presente dentro del módulo Sklearn, que convertirá los valores categóricos de una columna en particular a un entero. No necesitamos especificar los valores categóricos.

El método Fit_Transform () se usa junto con LabelEncoder () que se ajusta a los valores transformados.

En esta técnica, los valores reemplazados comienzan desde 0, y el reemplazo se realiza en orden alfabético de los valores categóricos.

Sintaxis

DataFrame_Object ['columna'] = LabelEncoder ().Fit_transform (dataFrame_Object ['columna'])

Aquí, la columna es el nombre de la columna en la que estamos reemplazando los valores.

Ejemplo

Reemplacemos los valores en el género, columnas de prioridad utilizando el siguiente enfoque:

# Importar el DataFrame desde el módulo pandas
Desde Pandas Import DataFrame
importación de pandas
# Importar LabelEncoder de Sklearn Module
de Sklearn.preprocesamiento de la etiqueta de etiqueta
# Crear un marco de datos con 10 filas que contienen 4 columnas
sets = dataFrame ('código': [1,2,3,4,5,6,7,8,9,0],
'Prioridad': ['alto', 'bajo', 'bajo', 'alto', 'medio', 'alto', 'medio', 'bajo', 'alto', 'medio'],
'Género': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Edad': [12,23,21,34,21,23,21,34,56,32])
# Convertir valores categóricos de la columna de género a numérico
Sets ['Gender'] = LabelEncoder ().Fit_transform (sets ['género'])
# Convertir valores categóricos de columna de prioridad a numérico
Sets ['priority'] = labelEncoder ().Fit_Transform (sets ['priority'])
Imprimir (conjuntos)

Producción

edad de género prioritario del código
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

Explicación

  1. Estamos reemplazando 'M' con 1 y 'F' con 2 y almacenamos los valores de la columna nuevamente en la columna de género. Ahora, podemos ver que la columna de género contiene valores dentro de 1 o 2.
  2. Hay tres categorías en la columna de prioridad. Son 'bajos', 'altos' y 'medianos'. Estamos reemplazando 'bajo' con 0, 'medio' con 1 y 'alto' con 2 y almacenando los valores de la columna nuevamente en la columna de prioridad.

Conclusión

Nuestra guía gira en torno a convertir valores categóricos en valores numéricos para que las máquinas puedan ser comprensibles, ya que el tipo de datos de objeto no puede ser procesado por ellos. Le hemos presentado los tres enfoques presentados por la biblioteca "Pandas" para obtener el tipo de datos requerido. Recuerde, debe usar el enfoque de Entroding Label ya que no sabe cuántas categorías están presentes en la columna del marco de datos de Pandas.