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

Reconstrução de Índice do Pandas

重建索引 alterarão os rótulos de linha e coluna do DataFrame. Reindexar significa fazer com que os dados coincidam com um conjunto de rótulos dados em uma axia específica.

Operações múltiplas podem ser realizadas através de índices, por exemplo-

Reordenar dados existentes para coincidir com um conjunto de novos rótulos.Inserir valores ausentes (NA) em posições de rótulos ausentes nos dados de rótulos.

Exemplo:

 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(['Baixo','Médio','Alto'],N).tolist(),
    'D': np.random.normal(100, 10, size=(N)).tolist()
 })
 # Reindexar DataFrame
 df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])
 print(df_reindexed)

Resultados da Execução:

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

Reindexar para alinhar com outros objetos

Pode-se desejar obter um objeto e reindexá-lo em suas axias para que coincida com outro objeto. Considere o seguinte exemplo para entender o conteúdo semelhante.

Exemplo

 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 da Execução:

         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

Aqui, df1 DataFrame como df2também são alterados e reindexados. Os nomes das colunas devem coincidir, caso contrário, NAN será adicionado a todas as etiquetas da coluna.

Preenchimento ao reindexar

reindex() Adotando o parâmetro opcional método, que é um método de preenchimento, cujos valores são os seguintes

pad/ffill − Preenchimento para frente

bfill/backfill − Preenchimento para trás

nearest − Preenchimento a partir do índice mais próximo

Exemplo

 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'])
 # Preenchimento de NAN
 print df2.reindex_like(df1)
 # Usar os valores anteriores para preencher NAN
 print("DataFrame com preenchimento para frente:")
 print(df2.reindex_like(df1,method='ffill'))

Resultados da Execução:

         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
DataFrame com preenchimento para frente:
         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

As últimas quatro linhas são preenchidas.

Limitação de preenchimento ao reindexar

O parâmetro limit oferece controle adicional ao reindexar. Limita a quantidade máxima de ocorrências consecutivas. Vamos considerar o seguinte exemplo para entender o conteúdo semelhante-

Exemplo

 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'])
 # Preenchimento de NAN
 print df2.reindex_like(df1)
 # Usar os valores anteriores para preencher NAN1do DataFrame:)
 print(df2.reindex_like(df1,method='ffill',limit=1))

Resultados da Execução:

         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
A preenchimento em frente está limitado a1do DataFrame:
         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 a sexta linha apenas preencheu a sétima linha. Então, cada linha permaneceu como era.

Renomear

Através do método rename(), você pode renomear o eixo com base em alguns mapeamentos (dicionário ou série) ou em uma função arbitrária.  
Vamos considerar o seguinte exemplo para entender isso-

  import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 print df1
 print ("Após renomear as linhas e colunas:")
 print(df1.rename(columns={'col1': 'c1', 'col2': 'c2'},
 index = {0 : 'apple', 1 : 'banana', 2 : 'durian'}))

Resultados da Execução:

         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
Após renomear as linhas e colunas:
                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