Python Pandas - Reindicizzazione
Reindexingmodifica le etichette di riga e le etichette di colonna di un DataFrame. Per reindicizzare mezzi per conformarsi i dati per abbinare un dato insieme di etichette lungo un asse.
È possibile eseguire più operazioni tramite indicizzazione come:
Riordina i dati esistenti in modo che corrispondano a un nuovo set di etichette.
Inserire gli indicatori di valore mancante (NA) nelle posizioni dell'etichetta in cui non esistevano dati per l'etichetta.
Esempio
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(['Low','Medium','High'],N).tolist(),
'D': np.random.normal(100, 10, size=(N)).tolist()
})
#reindex the DataFrame
df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])
print df_reindexed
Suo output è il seguente -
A C B
0 2016-01-01 Low NaN
2 2016-01-03 High NaN
5 2016-01-06 Low NaN
Reindicizza per allinearlo con altri oggetti
Potresti voler prendere un oggetto e reindicizzare i suoi assi in modo che siano etichettati come un altro oggetto. Considera il seguente esempio per capire lo stesso.
Esempio
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
Suo output è il seguente -
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
Note - Qui, il df1 DataFrame viene modificato e reindicizzato come df2. I nomi delle colonne devono corrispondere, altrimenti verrà aggiunto NAN per l'intera etichetta della colonna.
Riempimento durante il ReIndexing
reindex() accetta un metodo di parametro opzionale che è un metodo di riempimento con valori come segue -
pad/ffill - Riempi i valori in avanti
bfill/backfill - Riempi i valori all'indietro
nearest - Riempi dai valori di indice più vicini
Esempio
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'])
# Padding NAN's
print df2.reindex_like(df1)
# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill:")
print df2.reindex_like(df1,method='ffill')
Suo output è il seguente -
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
Data Frame with Forward Fill:
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
Note - Le ultime quattro file sono imbottite.
Limiti al riempimento durante la reindicizzazione
L'argomento limit fornisce un controllo aggiuntivo sul riempimento durante la reindicizzazione. Limite specifica il numero massimo di corrispondenze consecutive. Consideriamo il seguente esempio per capire lo stesso:
Esempio
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'])
# Padding NAN's
print df2.reindex_like(df1)
# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill limiting to 1:")
print df2.reindex_like(df1,method='ffill',limit=1)
Suo output è il seguente -
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
Data Frame with Forward Fill limiting to 1:
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
Note- Osserva, solo la settima riga è riempita dalla precedente sesta riga. Quindi, le righe vengono lasciate come sono.
Rinominare
Il metodo rename () consente di rinominare un asse in base a una mappatura (un dict o una serie) o una funzione arbitraria.
Consideriamo il seguente esempio per capire questo:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
print df1
print ("After renaming the rows and columns:")
print df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},
index = {0 : 'apple', 1 : 'banana', 2 : 'durian'})
Suo output è il seguente -
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
After renaming the rows and columns:
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
Il metodo rename () fornisce un file inplaceparametro denominato, che per impostazione predefinita è False e copia i dati sottostanti. Passaggioinplace=True per rinominare i dati in posizione.