English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Reconstrucción de índices de Pandas

重建索引 Cambiará las etiquetas de filas y columnas del DataFrame. Reindexar significa hacer coincidir los datos con un conjunto de etiquetas dado en un eje específico.

Se pueden realizar varias operaciones a través del índice, como-

Reordenar los datos existentes para que coincidan con un conjunto de nuevas etiquetas.Insertar valores NA en las posiciones de etiquetas donde no existen datos.

Ejemplo:

 import pandas as pd
 import numpy as np
 N=20
 df = pd.DataFrame({
    'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
    'x': np.linspace(0,stop=N-1,num=N),
    'y': np.random.rand(N),
    'C': np.random.choice(['Bajo','Medio','Alto'],N).tolist(),
    'D': np.random.normal(100, 10, size=(N)).tolist()
 )
 # Reconstruir índice de DataFrame
 df_reindexed = df.reindex(index=[02,5], columns=['A', 'C', 'B'])
 print(df_reindexed)

Resultados de la ejecución:

           A  C     B
0  2016-01-01  Bajo  NaN
2  2016-01-03  Alto  NaN
5  2016-01-06  Bajo  NaN

Reindexar para alinearse con otros objetos

Es posible que desee obtener un objeto y reindexarlo en su eje para que coincida con otro objeto. Consideremos el siguiente ejemplo para entender el contenido similar.

Ejemplo

 import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(10,3),columns=['col1','col2','col3'])
 df2 = pd.DataFrame(np.random.randn(7,3),columns=['col1','col2','col3'])
 df1 = df1.reindex_like(df2)
 print(df1)

Resultados de la ejecución:

         col1         col2         col3
0    -2.467652    -1.211687    -0.391761
1    -0.287396     0.522350     0.562512
2    -0.255409    -0.483250     1.866258
3    -1.150467    -0.646493    -0.222462
4     0.152768    -2.056643     1.877233
5    -1.155997     1.528719    -1.343719
6    -1.015606    -1.245936    -0.295275

Aquí, df1 DataFrame como df2También se cambia y reindexa. Los nombres de las columnas deben coincidir, de lo contrario se agregará NAN a toda la etiqueta de columna.

Relleno al reindexar

reindex() Usando el parámetro opcional método, que es un método de relleno con los valores siguientes

pad/ffill − Rellenar hacia adelante

bfill/backfill − Rellenar hacia atrás

nearest − Rellenar con el valor más cercano al índice

Ejemplo

 import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
 # Rellenar NAN
 print df2.reindex_like(df1)
 # Ahora llenamos NAN con los valores anteriores
 print("Fila de datos con relleno hacia adelante:")
 print(df2.reindex_like(df1,method='ffill'))

Resultados de la ejecución:

         col1        col2       col3
0    1.311620   -0.707176   0.599863
1   -0.423455   -0.700265   1.133371
2         NaN         NaN        NaN
3         NaN         NaN        NaN
4         NaN         NaN        NaN
5         NaN         NaN        NaN
Fila de datos con relleno hacia adelante:
         col1        col2        col3
0    1.311620   -0.707176    0.599863
1   -0.423455   -0.700265    1.133371
2   -0.423455   -0.700265    1.133371
3   -0.423455   -0.700265    1.133371
4   -0.423455   -0.700265    1.133371
5   -0.423455   -0.700265    1.133371

Las últimas cuatro filas se rellenan.

Límite de relleno al reindexar

El parámetro limit proporciona un control adicional al reindexar. Limita la cantidad máxima de coincidencias consecutivas. Consideremos el siguiente ejemplo para entender el contenido similar-

Ejemplo

 import pandas as pd
 import numpy as np
  
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
 # Rellenar NAN
 print df2.reindex_like(df1)
 # Ahora llenamos NAN con los valores anteriores print("Límite de relleno hacia adelante",1de la matriz de datos:")
 print(df2.reindex_like(df1,method='ffill',limit=1))

Resultados de la ejecución:

         col1        col2        col3
0    0.247784    2.128727    0.702576
1   -0.055713   -0.021732   -0.174577
2         NaN         NaN         NaN
3         NaN         NaN         NaN
4         NaN         NaN         NaN
5         NaN         NaN         NaN
Límite de relleno hacia adelante:1de la matriz de datos:
         col1        col2        col3
0    0.247784    2.128727    0.702576
1   -0.055713   -0.021732   -0.174577
2   -0.055713   -0.021732   -0.174577
3         NaN         NaN         NaN
4         NaN         NaN         NaN
5         NaN         NaN         NaN

Observe que la sexta línea anterior solo llenó la séptima línea. Luego, las filas se mantuvieron sin cambios.

Renombrar

A través del método rename(), puede reetiquetar el eje basado en ciertos mapeos (diccionario o serie) o cualquier función.  
Consideremos el siguiente ejemplo para entender esto-

  import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 print df1
 print ("Después de renombrar las filas y columnas:")
 print(df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},
 index = {0 : 'apple', 1 : 'banana', 2 : 'durian'}))

Resultados de la ejecución:

         col1        col2        col3
0    0.486791    0.105759    1.540122
1   -0.990237    1.007885   -0.217896
2   -0.483855   -1.645027   -1.194113
3   -0.122316    0.566277   -0.366028
4   -0.231524   -0.721172   -0.112007
5    0.438810    0.000225    0.435479
Después de renombrar las filas y columnas:
                c1          c2        col3
apple     0.486791    0.105759    1.540122
banana   -0.990237    1.007885   -0.217896
durian   -0.483855   -1.645027   -1.194113
3        -0.122316    0.566277   -0.366028
4        -0.231524   -0.721172   -0.112007
5         0.438810    0.000225    0.435479