He leído mucha discusión sobre iloc vs loc y comprendo la diferencia, pero lo que no entiendo es cuál es la diferencia entre:
indexed_data['var'][0:10]
vs
indexed_data['var'].iloc[0:10]
Estos parecen ser lo mismo y dan la misma salida.
¿Me estoy perdiendo de algo? ¡Gracias!
En las últimas versiones de pandas esto fue trabajo para la función ix
.
Pero a partir de pandas 0.20+ ix el indexador está en desuso .
Entonces use get_loc
para la posición de la columna var
y seleccione solo con iloc
:
indexed_data.iloc[0:10, df.columns.get_loc('var')]
En mi opinión la diferencia entre:
indexed_data['var'][0:10]
y:
indexed_data['var'].iloc[0:10]
Se encuentra principalmente en ][
. Creo que lo mejor es evitarlo porque es posible la chaining indexing
.
Los pandas modernos de Tom Augspurger (pandas dev) obtienen consejos :
La regla aproximada es que cada vez que vea corchetes consecutivos, ] [ , está pidiendo problemas. Reemplace eso con un
.loc[..., ...]
y estará listo.
Así que lo mejor es usar la función de pandas nativa como loc
, iloc
aquí.
Luego intente comparar las funciones llamadas para cada método, pero después de 40 minutos lo detengo (en realidad se llama una gran cantidad de funciones).
Reviso los horarios y son diferentes para cada función:
indexed_data = pd.DataFrame(np.random.randint(3, size=(2000000,1)), columns=['var']) In [151]: %timeit indexed_data['var'].iloc[0:100000] 10000 loops, best of 3: 62.1 µs per loop In [152]: %timeit indexed_data['var'][0:100000] 10000 loops, best of 3: 82.3 µs per loop In [153]: %timeit indexed_data.iloc[0:100000, indexed_data.columns.get_loc('var')] 10000 loops, best of 3: 155 µs per loop In [154]: %timeit indexed_data.loc[indexed_data.index[0:100000], 'var'] 100 loops, best of 3: 7.36 ms per loop #numpy approach - output is array In [155]: %timeit indexed_data['var'].values[0:100000] 100000 loops, best of 3: 5.35 µs per loop
solución alternativa:
indexed_data.loc[indexed_data.index[0:10], 'var']
Lea la documentación de Pandas sobre “Diferentes opciones para la indexación” ; le ayudará a decidir qué indexador usar para diferentes casos …