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