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

Reconstruction de l'index Pandas

重建索引 modifie les étiquettes de ligne et de colonne du DataFrame. Le réindexage consiste à faire correspondre les données à un ensemble de labels spécifiques sur un axe donné.

Des opérations multiples peuvent être effectuées via l'index, par exemple-

Réorganiser les données existantes pour correspondre à un ensemble de nouvelles étiquettes.Insérer des valeurs manquantes (NA) à des emplacements où les étiquettes ne sont pas présentes dans les données de balise.

Exemple :

 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(['Basse','Moyenne','Haute'],N).tolist(),
    'D': np.random.normal(100, 10, size=(N)).tolist()
 })
 # Reconstruction de l'index DataFrame
 df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])
 print(df_reindexed)

Résultat de l'exécution :

           A  C  B
0  2016-01-01  Basse  NaN
2  2016-01-03  Haute  NaN
5  2016-01-06  Basse  NaN

Réindexer pour aligner avec d'autres objets

Vous pourriez vouloir obtenir un objet et le réindexer sur son axe pour qu'il soit marqué comme identique à un autre objet. Considérez l'exemple suivant pour comprendre le même contenu.

Exemple

 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)

Résultat de l'exécution :

         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

Ici, df1 DataFrame comme df2est également modifié et réindexé. Les noms de colonnes doivent correspondre, sinon des NAN seront ajoutés à l'ensemble des étiquettes de colonne.

Remplissage lors du réindexage

reindex() En utilisant le paramètre optionnel méthode, il s'agit d'une méthode de remplissage dont les valeurs sont les suivantes

pad/ffill − Remplir en avant

bfill/backfill − Remplir en arrière

nearest − Remplir à partir de l'index le plus proche

Exemple

 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'])
 # Remplir les NAN
 print df2.reindex_like(df1)
 # Utiliser les valeurs précédentes pour remplir les NAN
 print("Fichier de données avec remplissage avant:")
 print(df2.reindex_like(df1,method='ffill'))

Résultat de l'exécution :

         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
Fichier de données avec remplissage avant
         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

Les quatre dernières lignes sont remplies.

Limitation de remplissage lors du réindexage

Le paramètre limit fournit un contrôle supplémentaire lors du réindexage. Il limite le nombre maximum de correspondances consécutives. Considérons l'exemple suivant pour comprendre le même contenu-

Exemple

 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'])
 # Remplir les NAN
 print df2.reindex_like(df1)
 # Utiliser les valeurs précédentes pour remplir les NAN1.Cadre de données :)}}
 print(df2.reindex_like(df1,method='ffill',limit=1))

Résultat de l'exécution :

         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
Remplissage avant de limiter :1Cadre de données :
         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

Veuillez noter que la sixième ligne précédente ne remplit que la septième ligne. Ensuite, chaque ligne reste inchangée.

Renommage

Par le biais de la méthode rename(), vous pouvez redéfinir les axes en fonction de certains mappages (dictionnaire ou série) ou de toute fonction arbitraire.  
Considérons l'exemple suivant pour comprendre cela-

  import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 print df1
 print ("Après renommage des lignes et des colonnes :")
 print(df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},
 index = {0 : 'apple', 1 : 'banana', 2 : 'durian'}))

Résultat de l'exécution :

         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
Après renommage des lignes et des colonnes :
                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