English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
重建索引 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.
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
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.
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.
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
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.
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-
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.
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