Saltar al contenido

Python Pandas: ¿diferencia entre ‘loc’ y ‘where’?

Necesitamos tu ayuda para difundir nuestros tutoriales referente a las ciencias informáticas.

Solución:

Pensar en loc como filtro: dame solo las partes del df que se ajusten a una condición.

where proviene originalmente de numpy. pasa por encima de un array y comprueba si cada elemento se ajusta a una condición. Entonces te devuelve todo arraycon un resultado o NaN. Una buena característica de where es que también puede recuperar algo diferente, por ejemplo df2 = df.where(df['Goals']>10, other='0')para reemplazar los valores que no cumplen la condición con 0.

ID  Run Distance Goals Gender
0   1   234      12     m
1   2   35       23     m
2   3   77       56     m
3   0   0        0      0
4   0   0        0      0
5   0   0        0      0
6   0   0        0      0
7   0   0        0      0
8   0   0        0      0
9   10  123      34     m

Además, mientras where es solo para filtrado condicional, loc es la forma estándar de seleccionar en Pandas, junto con iloc. loc utiliza nombres de filas y columnas, mientras que iloc utiliza su número de índice. Así que con loc podría elegir regresar, digamos, df.loc[0:1, ['Gender', 'Goals']]:

    Gender  Goals
0   m   12
1   m   23

Si revisa los documentos DataFrame.where reemplaza filas por condición – predeterminado por NANpero es posible especificar el valor:

df2 = df.where(df['Goals']>10)
print (df2)
     ID  Run Distance  Goals Gender
0   1.0         234.0   12.0      m
1   2.0          35.0   23.0      m
2   3.0          77.0   56.0      m
3   NaN           NaN    NaN    NaN
4   NaN           NaN    NaN    NaN
5   NaN           NaN    NaN    NaN
6   NaN           NaN    NaN    NaN
7   NaN           NaN    NaN    NaN
8   NaN           NaN    NaN    NaN
9  10.0         123.0   34.0      m

df2 = df.where(df['Goals']>10, 100)
print (df2)
    ID  Run Distance  Goals Gender
0    1           234     12      m
1    2            35     23      m
2    3            77     56      m
3  100           100    100    100
4  100           100    100    100
5  100           100    100    100
6  100           100    100    100
7  100           100    100    100
8  100           100    100    100
9   10           123     34      m

Otra sintaxis se llama boolean indexing y es para filtrar filas: eliminar la condición coincidente de las filas.

df2 = df.loc[df['Goals']>10]
#alternative
df2 = df[df['Goals']>10]

print (df2)
   ID  Run Distance  Goals Gender
0   1           234     12      m
1   2            35     23      m
2   3            77     56      m
9  10           123     34      m

si uso loc también es posible filtrar por filas por condición y columnas por nombre(s):

s = df.loc[df['Goals']>10, 'ID']
print (s)
0     1
1     2
2     3
9    10
Name: ID, dtype: int64

df2 = df.loc[df['Goals']>10, ['ID','Gender']]
print (df2)
   ID Gender
0   1      m
1   2      m
2   3      m
9  10      m

  • loc recupera solo las filas que coinciden con la condición.
  • where devuelve el marco de datos completo, reemplazando las filas que no coinciden con la condición (NaN por defecto).

Si te apasiona la programación, puedes dejar un post acerca de qué te ha parecido esta crónica.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *