¿Cuál es el punto de indexación en pandas?

¿Alguien puede indicarme un enlace o proporcionar una explicación de los beneficios de la indexación en pandas? De manera rutinaria, trato con las tablas y las uno en base a las columnas, y este proceso de unión / fusión parece volver a indexar las cosas de todos modos, por lo que es un poco incómodo aplicar los criterios de índice considerando que no creo que sea necesario.

¿Alguna idea sobre las mejores prácticas sobre la indexación?

Al igual que un dict, el índice de DataFrame está respaldado por una tabla hash. La búsqueda de filas basadas en valores de índice es como buscar valores de dict basados ​​en una clave.

En contraste, los valores en una columna son como valores en una lista.

La búsqueda de filas basadas en valores de índice es más rápida que buscar filas basadas en valores de columna.

Por ejemplo, considere

df = pd.DataFrame({'foo':np.random.random(), 'index':range(10000)}) df_with_index = df.set_index(['index']) 

Aquí es cómo puede buscar cualquier fila en la que la columna df['index'] igual a 999. Pandas tiene que recorrer cada valor en la columna para encontrar las unidades iguales a 999.

 df[df['index'] == 999] # foo index # 999 0.375489 999 

Aquí es cómo puede buscar cualquier fila donde el índice sea igual a 999. Con un índice, Pandas usa el valor de hash para encontrar las filas:

 df_with_index.loc[999] # foo 0.375489 # index 999.000000 # Name: 999, dtype: float64 

Buscar filas por índice es mucho más rápido que buscar filas por valor de columna:

 In [254]: %timeit df[df['index'] == 999] 1000 loops, best of 3: 368 µs per loop In [255]: %timeit df_with_index.loc[999] 10000 loops, best of 3: 57.7 µs per loop 

Sin embargo, tenga en cuenta que lleva tiempo construir el índice:

 In [220]: %timeit df.set_index(['index']) 1000 loops, best of 3: 330 µs per loop 

Por lo tanto, tener el índice solo es ventajoso cuando tiene que realizar muchas búsquedas de este tipo.

A veces, el índice desempeña un papel en la remodelación del DataFrame. Muchas funciones, como set_index , stack , unstack , pivot , pivot_table , melt , lreshape y lreshape , todas usan o manipulan el índice. A veces queremos que el DataFrame tenga una forma diferente para fines de presentación, o para operaciones de join , merge o groupby . (Como nota, la unión también se puede hacer en base a los valores de columna, pero la unión basada en el índice es más rápida). Entre bambalinas, join , merge y groupby ventajas de las búsquedas rápidas de índice cuando sea posible.

Las series temporales tienen métodos de resample , asfreq e interpolate cuyas implementaciones subyacentes también aprovechan las búsquedas de índice rápidas.

Entonces, al final, creo que el origen de la utilidad del índice, el motivo por el que aparece en tantas funciones, se debe a su capacidad para realizar búsquedas rápidas de hash.