Logotipo de Zephyrnet

Operaciones esenciales de Pandas que debe marcar de inmediato

Fecha:

Este artículo fue publicado como parte del Blogatón de ciencia de datos.

Introducción

W Limpiar y preparar la mayor parte del tiempo en un proyecto de ciencia de datos. Al ejecutar varios enfoques de preprocesamiento, podemos encontrar varios problemas que pueden resolverse principalmente con una sola biblioteca: Pandas. Pandas es un módulo de Python muy conocido que maneja todo, desde el preprocesamiento de datos hasta el análisis de datos. El amplio conjunto de funciones de Pandas permite a los usuarios completar trabajos considerablemente más rápido que los tradicionales.

pandas
Fuente: Imagen de ThisIsEngineering de Pexels

Este artículo analizará algunas de las operaciones simples pero poderosas dignas de marcar de Pand que discutiremos son en su mayoría genéricas, y se pueden modificar según los casos de uso.

Operaciones en Pandas

1. Para reemplazar los valores de NaN con valores aleatorios de una lista

Para reemplazar los valores de NaN en un Pandas DataFrame, generalmente, usamos el .fillna() método en un DataFrame. Para llenar estos valores de NaN al azar de una lista de números (incluidos float e int) o cadenas, podemos usar el .loc() método en el DataFrame.

Veamos un ejemplo a continuación:

Importar las bibliotecas

importar pandas como pd importar numpy como np

Creando un Pandas DataFrame con datos ficticios

df = pd.DataFrame({ 'Nombre': ['Alex', 'Jimmy', 'Katie', 'Brute'], 'Deporte favorito': [np.nan, 'Tenis sobre césped', 'Baloncesto', np. nan], 'Altura (en cm)': [167.7, 182.3, 178.7, 166.2], 'Salario': [12134343, 21312324, 421324554, 234434325] })

salida de código

Al ejecutar este código, obtenemos el Pandas DataFrame, como se adjunta en la imagen de arriba. En este conjunto de datos, agregamos a propósito algunos valores de NaN, ya que los necesitaríamos para tratar en esta operación.

Configuración del valor inicial:

Establezcamos el valor inicial ya que reemplazaremos los valores de NaN con datos aleatorios generados a partir de la biblioteca NumPy, y queremos el mismo conjunto de resultados cada vez que ejecutamos este código.

np.random.seed (124)

Sustitución de los valores de NaN

Ahora que tenemos nuestro conjunto de semillas, usaremos el .loc() en nuestro DataFrame para realizar nuestra operación.

df.loc[df['Deporte Favorito'].isna(), 'Deporte Favorito'] = [i for i in np.random.choice(['Voleibol', 'Fútbol', 'Baloncesto', 'Críquet'] , df['Deporte Favorito'].isna().sum())]

Ejecutar esto asignará una lista de valores a los valores de NaN en la columna 'Deporte favorito'. Esta lista habría elegido valores al azar de una lista de ['Voleibol', 'Fútbol', 'Baloncesto', 'Críquet'], y el número de valores a elegir será igual al número de NaNs en la columna seleccionada, aquí Deporte Favorito.

Cómo aplicar todos los conceptos

# Importar las bibliotecas import pandas como pd import numpy as np # Creando el DataFrame df = pd.DataFrame({ 'Name': ['Alex', 'Jimmy', 'Katie', 'Brute'], 'Favourite Sport': [np.nan, 'Lawn Tennis', 'Baloncesto', np.nan], 'Altura (en cm)': [167.7, 182.3, 178.7, 166.2], 'Salario': [12134343, 21312324, 421324554, 234434325] }) np.random.seed(124) df.loc[df['Deporte Favorito'].isna(), 'Deporte Favorito'] = [i for i in np.random.choice(['Voleibol', 'Fútbol ', 'Baloncesto', 'Críquet'], df['Deporte favorito'].isna().sum())] print(df)

Al ejecutar este código, nuestro conjunto de datos final se vería así:

Salida de código de pandas

Como se explicó, para los índices 0 y 3, vemos que los NaN se reemplazan con valores seleccionados al azar, es decir, 'Baloncesto' y 'Vóleibol' de la lista deportiva mencionada.

2. Para mapear valores en una columna categórica en códigos

La asignación de valores a códigos numéricos es un método útil que puede ser útil cuando queremos datos numéricos en nuestro DataFrame, pero debe ser único y estar relacionado con otra cosa. Un uso de esta función puede ser la asignación automática de números de lista en una clase a partir de una lista de nombres de estudiantes.

Comencemos repitiendo los requisitos previos del paso anterior: importar las bibliotecas, generar un DataFrame de Pandas y ejecutar la operación (1.).

Realización de los requisitos previos

# Importando las bibliotecas import pandas como pd import numpy as np # Creando el DataFrame df = pd.DataFrame({ 'Name': ['Alex', 'Jimmy', 'Katie', 'Brute'], 'Favourite Sport': [np.nan, 'Lawn Tennis', 'Baloncesto', np.nan], 'Altura (en cm)': [167.7, 182.3, 178.7, 166.2], 'Salario': [12134343, 21312324, 421324554, 234434325] }) # Reemplazo de los valores de NaN np.random.seed(124) df.loc[df['Deporte favorito'].isna(), 'Deporte favorito'] = [i por i en np.random.choice([' Voleibol', 'Fútbol', 'Baloncesto', 'Críquet'], df['Deporte Favorito'].isna().sum())]

Creando una lista de Códigos (desde la columna 'Nombre')

list(pd.Categorical(df['Name'], ordered = True).codes)

Al ejecutar esto, obtenemos lo siguiente:

Aquí, usamos el método Categorical() de Pandas y pasamos el 'Nombre' columna de nuestro DataFrame. También pasamos el valor 'Verdadero' al parámetro 'ordenado,' y así, obtenemos la lista de números basados ​​en el orden alfabético 'Nombre' columna. Así que cuando el Nombre 'Alex', el código asignado es '0', mientras que para el nombre 'Palanqueta,' el código asignado será '2' como el nombre 'Palanqueta' viene en la 3ra posición entre los cuatro nombres en el 'Nombre' columna, alfabéticamente. Pasamos todo este código a una lista para obtener una lista de valores.

También podemos pasar esta lista de valores al DataFrame como una columna.

Crear una nueva columna a partir de códigos

df['Número de rollo'] = lista(pd.Categorical(df['Nombre'], ordenado = Verdadero).códigos)

Ejecutar esto creará una nueva columna llamada 'Número de rollo'.

Poniendo todo esto junto

# Importar las bibliotecas import pandas como pd import numpy as np # Creando el DataFrame df = pd.DataFrame({ 'Name': ['Alex', 'Jimmy', 'Katie', 'Brute'], 'Favourite Sport': [np.nan, 'Lawn Tennis', 'Baloncesto', np.nan], 'Altura (en cm)': [167.7, 182.3, 178.7, 166.2], 'Salario': [12134343, 21312324, 421324554, 234434325] }) # Reemplazo de los valores de NaN np.random.seed(124) df.loc[df['Deporte favorito'].isna(), 'Deporte favorito'] = [i por i en np.random.choice([' Volleyball', 'Football', 'Basketball', 'Cricket'], df['Favourite Sport'].isna().sum())] # Asignación de la columna 'Nombre' a códigos numéricos df['Roll Number'] = list(pd.Categorical(df['Name'], ordered = True).codes) print(df)

Al ejecutar este código, nuestro DataFrame se vería así:

Salida de código de pandas

3. Para formatear los enteros en un marco de datos

Este proceso ayuda a mejorar la legibilidad de los números para los usuarios. Con frecuencia nos encontramos con números con numerosos dígitos en un DataFrame, lo que provoca confusión y mala interpretación.

Daremos formato a los valores en la columna 'Salario' en el siguiente ejemplo.

Comencemos por completar los requisitos de las operaciones principales: importar bibliotecas, construir Pandas DataFrame y las dos operaciones anteriores.

Realización de los requisitos previos

# Importar las bibliotecas import pandas como pd import numpy as np # Creando el DataFrame df = pd.DataFrame({ 'Name': ['Alex', 'Jimmy', 'Katie', 'Brute'], 'Favourite Sport': [np.nan, 'Lawn Tennis', 'Baloncesto', np.nan], 'Altura (en cm)': [167.7, 182.3, 178.7, 166.2], 'Salario': [12134343, 21312324, 421324554, 234434325] }) # Reemplazo de los valores de NaN np.random.seed(124) df.loc[df['Deporte favorito'].isna(), 'Deporte favorito'] = [i por i en np.random.choice([' Volleyball', 'Football', 'Basketball', 'Cricket'], df['Favourite Sport'].isna().sum())] # Asignación de la columna 'Nombre' a códigos numéricos df['Roll Number'] = list(pd.Categorical(df['Name'], ordered = True).codes)

Dar formato a la columna 'Salario'

df['Salario'] = df['Salario'].apply(lambda x: format(x, ',d'))

Cómo aplicar todos los conceptos

# Importar las bibliotecas import pandas como pd import numpy as np # Creando el DataFrame df = pd.DataFrame({ 'Name': ['Alex', 'Jimmy', 'Katie', 'Brute'], 'Favourite Sport': [np.nan, 'Lawn Tennis', 'Baloncesto', np.nan], 'Altura (en cm)': [167.7, 182.3, 178.7, 166.2], 'Salario': [12134343, 21312324, 421324554, 234434325] }) # Reemplazo de los valores de NaN np.random.seed(124) df.loc[df['Deporte favorito'].isna(), 'Deporte favorito'] = [i por i en np.random.choice([' Volleyball', 'Football', 'Basketball', 'Cricket'], df['Favourite Sport'].isna().sum())] # Asignación de la columna 'Nombre' a códigos numéricos df['Roll Number'] = list(pd.Categorical(df['Name'],ordered = True).codes) # Formatear valores en la columna 'Salary' df['Salary'] = df['Salary'].apply(lambda x: format(x , ',d')) imprimir(df)

Al ejecutar este código, obtenemos lo siguiente:

Salida de código de pandas

Aquí, pasamos cada valor en el 'Salario' columna en el incorporado formato() método, usando el .solicitar() Método de Pandas.

Una posible advertencia al realizar esta operación es que el valor se vuelve de tipo objeto o categórico al formatear un entero debido a las comas entre los dígitos.

4. Para extraer filas si una cierta columna categórica tiene una subcadena dada

A veces deseamos eliminar filas que cumplen un requisito específico. Esta operación a menudo se realiza en las columnas categóricas de un DataFrame. Realizaremos una operación similar en una de nuestras columnas categóricas a continuación.

En nuestro DataFrame, extraeremos todas las filas donde la persona tiene un juego de pelota como Deporte favorito. Para llevar a cabo este proceso, utilizaremos nuestra columna de Deporte Favorito.

Comenzaremos con los requisitos previos, incluidas las importaciones de bibliotecas, la construcción de DataFrame y las operaciones completadas anteriormente.

Realización de los requisitos previos

# Importar las bibliotecas import pandas como pd import numpy as np # Creando el DataFrame df = pd.DataFrame({ 'Name': ['Alex', 'Jimmy', 'Katie', 'Brute'], 'Favourite Sport': [np.nan, 'Lawn Tennis', 'Baloncesto', np.nan], 'Altura (en cm)': [167.7, 182.3, 178.7, 166.2], 'Salario': [12134343, 21312324, 421324554, 234434325] }) # Reemplazo de los valores de NaN np.random.seed(124) df.loc[df['Deporte favorito'].isna(), 'Deporte favorito'] = [i por i en np.random.choice([' Volleyball', 'Football', 'Basketball', 'Cricket'], df['Favourite Sport'].isna().sum())] # Mapeo de la columna 'Nombre' en códigos numéricos df['Roll Number'] = list(pd.Categorical(df['Name'],ordered = True).codes) # Formatear valores en la columna 'Salary' df['Salary'] = df['Salary'].apply(lambda x: format (x, ', d'))

Extracción de las filas de interés

print(df[df['Deporte Favorito'].str.contains('pelota')])

Ejecutar esto extraerá todas las filas donde el Deporte Favorito de una persona tiene el texto 'pelota' en ella.

Cómo aplicar todos los conceptos

# Importar las bibliotecas import pandas como pd import numpy as np # Creando el DataFrame df = pd.DataFrame({ 'Name': ['Alex', 'Jimmy', 'Katie', 'Brute'], 'Favourite Sport': [np.nan, 'Lawn Tennis', 'Baloncesto', np.nan], 'Altura (en cm)': [167.7, 182.3, 178.7, 166.2], 'Salario': [12134343, 21312324, 421324554, 234434325] }) # Reemplazo de los valores de NaN np.random.seed(124) df.loc[df['Deporte favorito'].isna(), 'Deporte favorito'] = [i por i en np.random.choice([' Volleyball', 'Football', 'Basketball', 'Cricket'], df['Favourite Sport'].isna().sum())] # Mapeo de la columna 'Nombre' en códigos numéricos df['Roll Number'] = list(pd.Categorical(df['Name'],ordered = True).codes) # Formatear valores en la columna 'Salary' df['Salary'] = df['Salary'].apply(lambda x: format (x, ',d')) # Comprobar si 'pelota' está en la columna 'Deporte favorito' print(df[df['Deporte favorito'].str.contains('pelota')])

Al ejecutar este código, obtenemos lo siguiente:

Salida de código de pandas

Aquí, como se explicó, obtuvimos todas las filas de nuestro DataFrame que tienen una subcadena 'pelota' en la columna Favorito.

Conclusiones

Este artículo analiza cuatro operaciones de Pandas simples pero poderosas que se pueden usar en varias situaciones. Todas las acciones descritas se realizan de la forma más sencilla posible; sin embargo, puede haber otras formas de realizar estas operaciones. Esta simplicidad hace que valga la pena marcar el artículo porque ahorra tiempo buscando soluciones similares en StackOverflow.

Puntos clave:

  • Vimos cómo podíamos reemplazar los NaN con valores aleatorios: números o cadenas.
  • También vimos cómo codificar las cadenas en números según la disposición alfabética de las cadenas.
  • En la tercera operación, aprendimos cómo formatear los números enteros y mejorar la legibilidad para el usuario.
  • También hemos visto cómo formatear esto puede cambiar el tipo de datos de la columna de int a str.
  • En la cuarta operación, entendimos cómo extraer filas cuando una subcadena dada se encuentra en una de las columnas especificadas.

Conecta conmigo en Etiqueta LinkedIn. Mira mis otros artículos Aquí.

Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.

punto_img

Información más reciente

punto_img