Quantcast
Channel: Obtener datos del dataframe según una condición - Stack Overflow en español
Viewing all articles
Browse latest Browse all 2

Respuesta de TitoOrt en Obtener datos del dataframe según una condición

$
0
0

Eficiencia

Las dos operaciones no solo son compatibles en este caso sino que a nivel de eficiencia también parece que no haya mayores diferencias:

# Usando []%timeit val = df[df['sepal length (cm)'] > 4.5]1.09 ms ± 21 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)# Usando .loc%timeit val = df.loc[df['sepal length (cm)'] > 4.5]1.08 ms ± 20.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

Usos

Programar de forma explicita como norma es siempre la mejor opción. Si usamos la opcion df.loc[] siempre sabemos que nos estamos refiriendo a filas, mientras que df[] es ambiguo en cuanto a referirse a filas o columnas. Por ejemplo:

# Dataframe con columnas e indices del mimsmo nombredf = pd.DataFrame([[1,2], [3,4]], columns = ['a', 'b'], index = ['a','b']);df    a   ba   1   2b   3   4df['a']a    1b    3Name: a, dtype: int64df.loc['a']a    1b    2Name: a, dtype: int64

Si te fijas, en la primera llamada df['a'] el output que nos da es la columnaa, mientras que df.loc['a'] nos devuelve la filaa.Si bien es cierto que directamente llamar a las columnas y a los indices de la misma manera ya me parece un crimen, como buena practica insisto que hacer la llamada de forma explicita siempre es aconsejable.

Por otro lado, en tu caso no estas usando una llamada a una columna como el ejemplo que te he puesto, sino aplicando una mascara booleana. Es decir, le estas diciendo al dataframe que te devuelva las filas en las que tu mascara es positiva (recordemos que df['sepal length (cm)'] > 4.5 nos devuelve una lista de booleanos tal que asi: [True, False, True, ...]). Esto te puede generar problemas si alguna de tus columnas tiene nombre de booleano df = pd.DataFrame({True:[0,1],False:[2,3]}).

Ademas, df.iloc[] se puede usar para acceder a multi-indice y para modificar valores (cosa que df[] no te permite. )

Si el idioma no te es impedimento, te sugiero que le eches un vistazo a este articulo donde encontraras una buena explicacion de los usos de [], .loc y .iloc.


Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles





Latest Images