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 NAN
pero 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.