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.