Existen diferentes motivos por los que puede ser necesario limitar o acotar los valores en un DataFrame. Por ejemplo, eliminar valores atípicos o garantizar la consistencia de los datos. Esto es algo que se puede conseguir mediante asignaciones condicionales de valores, aunque también existe el método clip() que lo permite hacer de una manera más legible y con la que es más fácil comprender el código.
Para ver cómo acotar los valores en un DataFrame se puede crear uno con un conjunto de datos aleatorio. Por ejemplo, el que se obtiene con el siguiente código.
import pandas as pd
import numpy as np
np.random.seed(0)
data = pd.DataFrame(np.random.randint(0, 100, (5, 4)),
columns=['A', 'B', 'C', 'D'])
data A B C D 0 44 47 64 67 1 67 9 83 21 2 36 87 70 88 3 88 12 58 65 4 39 87 46 88
El resultado es un DataFrame con cuatro columnas y cinco filas de valores aleatorios entre 0 y 100. En este caso, hay dos registros cuyo valor es inferior a 20: B1 y B3. Si se necesita que el valor mínimo en este conjunto de datos sea igual a 20, se pueden modificar estos registros mediante asignación condicional.
data[data < 20] = 20 data
A B C D 0 44 47 64 67 1 67 20 83 21 2 36 87 70 88 3 88 20 58 65 4 39 87 46 88
Lo que reemplaza por el valor deseado todos los registros que cumple la condición. Si se desea acotar también los valores que superan uno dado, simplemente se tiene que repetir la línea anterior con nueva condición. Por ejemplo, fijar un máximo de 80 para los valores.
data[data > 80] = 80 data
A B C D 0 44 47 64 67 1 67 20 80 21 2 36 80 70 80 3 80 20 58 65 4 39 80 46 80
clip() para acotar los valores en un DataFrameAunque la asignación condicional funciona bien, el uso del método clip() puede ser más fácil de entender para usuarios con poca experiencia en Pandas. Al presentar una sintaxis es más fácil de leer. Para reemplazar todos los valores que sean inferiores a un mínimo por este solamente se tiene que llamar indicando el valor en el parámetro lower. Lo que se muestra a continuación, donde primero se vuelven a regenerar el DataFrame aleatorio.
np.random.seed(0)
data = pd.DataFrame(np.random.randint(0, 100, (5, 4)),
columns=['A', 'B', 'C', 'D'])
data.clip(lower=20) A B C D 0 44 47 64 67 1 67 20 83 21 2 36 87 70 88 3 88 20 58 65 4 39 87 46 88
Para definir un valor máximo solamente se tiene que indicar este mediante el parámetro upper. Así, para indicar un máximo de 80 solamente se tiene que ejecutar la siguiente línea.
data.clip(upper=80)
A B C D 0 44 47 64 67 1 67 9 80 21 2 36 80 70 80 3 80 12 58 65 4 39 80 46 80
Obviamente, si se combinan los dos parámetros en una llamada, se puede acotar al mismo tiempo los valores máximos y mínimos.
data.clip(lower=20, upper=80)
A B C D 0 44 47 64 67 1 67 20 80 21 2 36 80 70 80 3 80 20 58 65 4 39 80 46 80
Nótese que el método, como la mayoría de los métodos de los DataFrames de Pandas, devuelve una copia de los datos originales con los cambios. Algo que puede generar problemas de memoria cuando se trabaja con conjuntos de datos grandes. Si se desea evitar esto y modificar el objeto original se puede asignar el valor verdadero a la propiedad inplace.
data.clip(lower=20, upper=80, inplace=True) data
A B C D 0 44 47 64 67 1 67 20 80 21 2 36 80 70 80 3 80 20 58 65 4 39 80 46 80
En esta entrada se han visto dos alternativas para acotar los valores en un DataFrame de Pandas: asignación condicional y el método clip(). Aunque la asignación condicional es una forma sencilla de obtener los resultados, el método clip() ofrece una opción que puede ser más fácil de leer. Con lo que se puede conseguir un código más limpio y fácil de mantener.
Seguimos ampliando el laboratorio de Analytics Lane con el lanzamiento de la versión 1.3, disponible…
Cerramos la serie internacional con la categoría más estrambótica de todas: indicadores que predicen el…
Si el WOE y el IV son la base matemática del credit scoring, el binning…
Seguimos iterando sobre el laboratorio de Analytics Lane y lanzamos la versión 1.2, disponible en:https://www.analyticslane.com/lab/es…
En la primera entrega vimos cómo se puede medir la economía mirando lo que la…
Tienes los datos de tráfico web de los últimos cinco meses desglosados por canal: orgánico,…
This website uses cookies.