Los objetos DataFrame de Pandas son unas estructuras de datos fantásticas para el análisis y manipulación de los datos. Facilitando muchas tareas en el día a día. Por ejemplo, cuando se necesita reemplazar ciertos registros en función de los valores de estos u otros, esto es, cuando se desea realizar un reemplazo condicional de valores.
Conjunto de datos de ejemplo
En primer lugar, es necesario disponer de un conjunto de datos aleatorio, por lo cual se puede crear un con datos enteros, reales y cadenas de texto de forma aleatoria. Tal como el que se puede crear con el siguiente código.
import pandas as pd import numpy as np np.random.seed(42) # Crear DataFrame vacío df = pd.DataFrame() # Agregar columnas con datos aleatorios df['Col1'] = np.random.randint(0, 100, 12) df['Col2'] = np.random.randn(12) df['Col3'] = np.random.choice(['Alice', 'Bob', 'Caroline'], 12) # Mostrar todo el DataFrame df
Col1 Col2 Col3 0 51 0.392580 Alice 1 92 -0.929185 Caroline 2 14 0.079832 Alice 3 71 -0.159517 Caroline 4 60 0.022222 Caroline 5 20 -0.427793 Alice 6 82 -0.531817 Alice 7 86 -0.117476 Caroline 8 74 0.222079 Bob 9 74 -0.767977 Alice 10 87 0.142465 Bob 11 99 -0.034652 Bob
Lo que crea un DataFrame con tres columnas y doce filas aleatorias. La primera con valores enteros entre 0 y 99, la segunda con valores reales y la tercera con uno de los tres nombres indicados.
Reemplazo condicional de valores
Para reemplazar condicionalmente los valores de un DataFrame en Pandas la opción más sencilla es realizar una selección booleana. Crear una lista con las posiciones de los valores que se desean reemplazar y usar .loc
para seleccionarlos y asignarles un nuevo valor. Por ejemplo, en el caso de la columna 'Col2'
existen valores que son negativos, se puede identificar todos aquellos que son menores de cero y reemplazar su valor por 0. Esto se puede conseguir con el siguiente código.
df.loc[df['Col2'] < 0, 'Col2'] = 0 df
Col1 Col2 Col3 0 51 0.392580 Alice 1 92 0.000000 Caroline 2 14 0.079832 Alice 3 71 0.000000 Caroline 4 60 0.022222 Caroline 5 20 0.000000 Alice 6 82 0.000000 Alice 7 86 0.000000 Caroline 8 74 0.222079 Bob 9 74 0.000000 Alice 10 87 0.142465 Bob 11 99 0.000000 Bob
En primer lugar, lo que se hace es identificar los valores de 'Col2'
que son negativos, usando para ellos la expresión df['Col2'] < 0
. Lo que genera una serie con el número de filas con valores verdaderos o falsos. Utilizando esta serie para seleccionar con .loc[]
los registros para los que el valor es verdadero, es decir, el dato es negativo. Una vez seleccionados los registros se le puede asignar un nuevo valor al subconjunto de datos.
Reemplazo de valores de tipo texto
El método descrito anteriormente se puede usar también para reemplazar valores de tipo texto. Solamente se tiene que crear la serie evaluando el contenido de la columna de texto. Por ejemplo, si se desea reemplazar la cadena 'Caroline'
por 'Carol'
se puede hacer.
df.loc[df['Col3'] == 'Caroline', 'Col3'] = 'Carol' df
Col1 Col2 Col3 0 51 0.392580 Alice 1 92 1.000000 Carol 2 14 0.079832 Alice 3 71 1.000000 Carol 4 60 1.022222 Carol 5 20 0.000000 Alice 6 82 0.000000 Alice 7 86 1.000000 Carol 8 74 1.222079 Bob 9 74 0.000000 Alice 10 87 1.142465 Bob 11 99 1.000000 Bob
Un proceso exactamente igual al visto en el apartado anterior. Si se usan los métodos .str
de las Series de Pandas se puede realizar operaciones más complejas con las cadenas de texto. Se pueden identificar las columnas que contienen una letra y actualizar otros valores, no solo reemplazarlos. Por ejemplo, dar un punto más en la columna 'Col2'
a aquellos registros que contenga una 'o'
en la columna 'Col3'
. Proceso que se muestra en el siguiente código.
df.loc[df['Col3'].str.contains('o') , 'Col2'] += 1 df
Col1 Col2 Col3 0 51 0.392580 Alice 1 92 1.000000 Carol 2 14 0.079832 Alice 3 71 1.000000 Carol 4 60 1.022222 Carol 5 20 0.000000 Alice 6 82 0.000000 Alice 7 86 1.000000 Carol 8 74 1.222079 Bob 9 74 0.000000 Alice 10 87 1.142465 Bob 11 99 1.000000 Bob
Operación que, aunque no tiene mucho sentido, permite ver el potencial que ofrece esta forma de trabajar que permiten los DataFrames de Pandas.
Conclusiones
La selección booleana es una forma de trabajar con los DataFrame de Pandas que permite llevar a cabo un reemplazo condicional de valores de una forma fácil y sencilla. Cuando se comprende esta forma de trabajar se pueden realizar operaciones sencillas de una forma compacta y elegante, además de fácil de leer.
Deja una respuesta