Skip to content

Cet article explique comment ajouter de nouvelles lignes/colonnes ร  un ๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ .

Contenu

Notez que la mรฉthode ๐šโ€Œ๐ฉโ€Œ๐ฉโ€Œ๐žโ€Œ๐งโ€Œ๐โ€Œ() a รฉtรฉ dรฉconseillรฉe dans la version 1.4.0 et supprimรฉe dans la version 2.0.0 .

L’exemple de code de cet article utilise la version 2.0.3 de pandas .

import pandas as pd print(pd.__version__) # 2.0.3 

Ajouter une colonne ร  un ๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ

Ajouter une colonne en utilisant la notation entre crochets []

Vous pouvez sรฉlectionner une colonne ร  l’aide de [๐œโ€Œ๐จโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐งโ€Œ_๐งโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ] et lui attribuer des valeurs.

df = pd.DataFrame({'A': ['A1', 'A2', 'A3'], 'B': ['B1', 'B2', 'B3'], 'C': ['C1', 'C2', 'C3']}, index=['ONE', 'TWO', 'THREE']) print(df) # A B C # ONE A1 B1 C1 # TWO A2 B2 C2 # THREE A3 B3 C3 df['A'] = 0 print(df) # A B C # ONE 0 B1 C1 # TWO 0 B2 C2 # THREE 0 B3 C3 

Si vous spรฉcifiez un nom de colonne inexistant, une nouvelle colonne sera ajoutรฉe avec la valeur attribuรฉe.

Attribuer une valeur รฉvolutive

Lorsqu’une valeur scalaire est attribuรฉe, tous les รฉlรฉments de la colonne sont dรฉfinis sur cette valeur.

df['D'] = 0 print(df) # A B C D # ONE 0 B1 C1 0 # TWO 0 B2 C2 0 # THREE 0 B3 C3 0 

Affecter un objet de type tableau

Si un objet de type tableau tel qu’une liste ou un tableau NumPy ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ est affectรฉ, chaque รฉlรฉment est affectรฉ directement. Notez qu’une incompatibilitรฉ entre le nombre d’รฉlรฉments de la liste et le nombre de lignes entraรฎnera une erreur.

df['E'] = [0, 1, 2] print(df) # A B C D E # ONE 0 B1 C1 0 0 # TWO 0 B2 C2 0 1 # THREE 0 B3 C3 0 2 # df['F'] = [0, 1, 2, 3] # ValueError: Length of values does not match length of index 

Attribuez un ๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ

Vous pouvez รฉgalement attribuer un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ .

ร‰tant donnรฉ que chaque colonne d’un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ est traitรฉe comme un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ , vous pouvez ajouter de nouvelles colonnes en fonction des rรฉsultats des opรฉrations ou des rรฉsultats. traitรฉs. de ces mรฉthodes.

df['F'] = df['B'] + df['C'] df['G'] = df['B'].str.lower() print(df) # A B C D E F G # ONE 0 B1 C1 0 0 B1C1 b1 # TWO 0 B2 C2 0 1 B2C2 b2 # THREE 0 B3 C3 0 2 B3C3 b3 

Si l’รฉtiquette d’index du S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ ne correspond pas au nom de colonne du D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ , une valeur manquante N๐šโ€ŒN est attribuรฉ.

s = pd.Series(['X2', 'X3', 'X4'], index=['TWO', 'THREE', 'FOUR'], name='X') print(s) # TWO X2 # THREE X3 # FOUR X4 # Name: X, dtype: object df['H'] = s print(df) # A B C D E F G H # ONE 0 B1 C1 0 0 B1C1 b1 NaN # TWO 0 B2 C2 0 1 B2C2 b2 X2 # THREE 0 B3 C3 0 2 B3C3 b3 X3 

L’attribut ๐ฏโ€Œ๐šโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ d’un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ renvoie un tableau NumPy ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซ๐šโ€Œ๐ฒโ€Œ , traitรฉ comme un objet de type tableau. Les รฉlรฉments sont attribuรฉs dans l’ordre, quel que soit le ๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ . Notez qu’une erreur se produit si le nombre d’รฉlรฉments ne correspond pas au nombre de lignes.

print(s.values) # ['X2' 'X3' 'X4'] df['I'] = s.values print(df) # A B C D E F G H I # ONE 0 B1 C1 0 0 B1C1 b1 NaN X2 # TWO 0 B2 C2 0 1 B2C2 b2 X2 X3 # THREE 0 B3 C3 0 2 B3C3 b3 X3 X4 

La mรฉthode ๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF ๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ.๐šโ€Œ๐ฌโ€Œ๐ฌ๐ขโ€Œ๐ โ€Œ๐งโ€Œ()

La mรฉthode ๐šโ€Œ๐ฌโ€Œ๐ฌโ€Œ๐ขโ€Œ๐ โ€Œ๐งโ€Œ() ajoute une nouvelle colonne ou attribue de nouvelles valeurs ร  une colonne existante.

Vous pouvez prรฉciser le nom de la colonne et sa valeur ร  l’aide de la structure d’argument de mot-clรฉ, . . . . . . . .

Si le nom de la colonne existe, la mรฉthode lui attribue la valeur. Si le nom de la colonne est nouveau, elle ajoute une nouvelle colonne. Cette mรฉthode renvoie un nouvel objet, tandis que l’objet d’origine reste identique.

df = pd.DataFrame({'A': ['A1', 'A2', 'A3'], 'B': ['B1', 'B2', 'B3'], 'C': ['C1', 'C2', 'C3']}, index=['ONE', 'TWO', 'THREE']) print(df.assign(A=0)) # A B C # ONE 0 B1 C1 # TWO 0 B2 C2 # THREE 0 B3 C3 print(df.assign(D=0)) # A B C D # ONE A1 B1 C1 0 # TWO A2 B2 C2 0 # THREE A3 B3 C3 0 print(df) # A B C # ONE A1 B1 C1 # TWO A2 B2 C2 # THREE A3 B3 C3 

Tout comme lorsque vous ajoutez une colonne avec [๐œโ€Œ๐จโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐งโ€Œ_๐งโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ] , vous pouvez dรฉfinir des listes ou des S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ avec la mรฉthode ๐šโ€Œ๐ฌโ€Œ๐ฌ๐ขโ€Œ๐ โ€Œ๐งโ€Œ() . Vous pouvez รฉgalement ajouter/affecter plusieurs colonnes simultanรฉment en spรฉcifiant plusieurs arguments de mot-clรฉ.

s = pd.Series(['X2', 'X3', 'X4'], index=['TWO', 'THREE', 'FOUR'], name='X') print(s) # TWO X2 # THREE X3 # FOUR X4 # Name: X, dtype: object df_new = df.assign(C='XXX', D=0, E=[0, 1, 2], F=s, G=s.values, H=df['A'] + df['B']) print(df_new) # A B C D E F G H # ONE A1 B1 XXX 0 0 NaN X2 A1B1 # TWO A2 B2 XXX 0 1 X2 X3 A2B2 # THREE A3 B3 XXX 0 2 X3 X4 A3B3 

Notez que dans la mรฉthode ๐šโ€Œ๐ฌโ€Œ๐ฌโ€Œ๐ขโ€Œ๐ โ€Œ๐งโ€Œ() , vous spรฉcifiez le nom de la colonne comme argument de mot-clรฉ. Par consรฉquent, les noms qui ne sont pas valides comme noms d’argument, tels que ceux avec des symboles autres que des traits de soulignement _ et des mots rรฉservรฉs, entraรฎneront une erreur. Pour plus d’informations sur les noms d’arguments acceptables en Python, reportez-vous ร  l’article suivant.

La mรฉthode ๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซ โ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ.๐ขโ€Œ๐งโ€Œ๐ฌโ€Œ๐žโ€Œ๐ซโ€Œ๐ญโ€Œ()

La mรฉthode ๐ขโ€Œ๐งโ€Œ๐ฌโ€Œ๐žโ€Œ๐ซโ€Œ๐ญโ€Œ() vous permet d’ajouter une colonne ร  n’importe quelle position dans un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ .

Spรฉcifiez la position comme premier argument, le nom de la colonne comme deuxiรจme et la valeur ร  attribuer comme troisiรจme.

Le troisiรจme argument peut accepter une valeur scalaire, un objet de type tableau tel qu’une liste ou un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ . Le concept est similaire aux exemples prรฉcรฉdents.

Le D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ original est directement mis ร  jour.

df = pd.DataFrame({'A': ['A1', 'A2', 'A3'], 'B': ['B1', 'B2', 'B3'], 'C': ['C1', 'C2', 'C3']}, index=['ONE', 'TWO', 'THREE']) s = pd.Series(['X2', 'X3', 'X4'], index=['TWO', 'THREE', 'FOUR'], name='X') df.insert(2, 'X', 0) print(df) # A B X C # ONE A1 B1 0 C1 # TWO A2 B2 0 C2 # THREE A3 B3 0 C3 df.insert(0, 'Y', s) print(df) # Y A B X C # ONE NaN A1 B1 0 C1 # TWO X2 A2 B2 0 C2 # THREE X3 A3 B3 0 C3 

Notez que la spรฉcification d’une valeur dรฉpasse le nombre de lignes comme premier argument provoquera une erreur. L’utilisation d’une valeur nรฉgative pour prรฉciser la position ร  partir de la fin n’est pas autorisรฉe. Pour indiquer la fin comme position de la nouvelle colonne, utilisez ๐ฅโ€Œ๐žโ€Œ๐งโ€Œ(๐โ€Œ๐Ÿโ€Œ.๐œโ€Œ๐จโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐งโ€Œ๐ฌโ€Œ) ou ๐โ€Œ๐Ÿโ€Œ.๐ฌโ€Œ๐กโ€Œ๐šโ€Œ๐ฉโ€Œ๐žโ€Œ[1] pour obtenir le nombre de colonnes existantes.

# df.insert(10, 'Z', 10) # IndexError: index 10 is out of bounds for axis 0 with size 5 # df.insert(-1, 'Z', 10) # ValueError: unbounded slice 

De plus, l’attribution d’un nom de colonne existant comme deuxiรจme argument entraรฎnera une erreur. Bien qu’il soit possible d’autoriser les doublons en dรฉfinissant l’argument ๐šโ€Œ๐ฅโ€Œ๐ฅโ€Œ๐จโ€Œ๐ฐโ€Œ_๐โ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐ฌโ€Œ sur T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ , cela n’est pas recommandรฉ en raison de la confusion potentielle provoquรฉe par les noms de colonnes en double.

# df.insert(0, 'Y', 10) # ValueError: cannot insert Y, already exists df.insert(0, 'Y', 10, allow_duplicates=True) print(df) # Y Y A B X C # ONE 10 NaN A1 B1 0 C1 # TWO 10 X2 A2 B2 0 C2 # THREE 10 X3 A3 B3 0 C3 

La fonction ๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.๐œโ€Œ๐จโ€Œ๐งโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ()

Vous pouvez concatรฉner plusieurs objets D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ et S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ ร  l’aide de la fonction ๐œโ€Œ๐จโ€Œ๐งโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ() .

En concatรฉnant un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ ร  un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ , vous pouvez ajouter une nouvelle colonne.

Dans les exemples prรฉcรฉdents, lors de l’ajout d’un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ , son attribut ๐งโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ a รฉtรฉ ignorรฉ. Cependant, lors de la concatรฉnation horizontale avec la fonction ๐œโ€Œ๐จโ€Œ๐งโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ() avec ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ=1 , le ๐งโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ du S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ est utilisรฉ comme nom de colonne.

Spรฉcifiez une liste ou un tuple d’objets que vous souhaitez concatรฉner comme premier argument de ๐œโ€Œ๐จโ€Œ๐งโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ() .

df = pd.DataFrame({'A': ['A1', 'A2', 'A3'], 'B': ['B1', 'B2', 'B3'], 'C': ['C1', 'C2', 'C3']}, index=['ONE', 'TWO', 'THREE']) s = pd.Series(['X2', 'X3', 'X4'], index=['TWO', 'THREE', 'FOUR'], name='X') print(pd.concat([df, s], axis=1)) # A B C X # ONE A1 B1 C1 NaN # TWO A2 B2 C2 X2 # THREE A3 B3 C3 X3 # FOUR NaN NaN NaN X4 

Pour conserver uniquement les lignes partageant des indices communs, spรฉcifiquesz ๐ฃโ€Œ๐จโ€Œ๐ขโ€Œ๐งโ€Œ=’๐ขโ€Œ๐งโ€Œ๐งโ€Œ๐žโ€Œ๐ซโ€Œ’ .

print(pd.concat([df, s], axis=1, join='inner')) # A B C X # TWO A2 B2 C2 X2 # THREE A3 B3 C3 X3 

La fonction vous permet de concatรฉner plusieurs objets S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ et D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ .

s1 = pd.Series(['X1', 'X2', 'X3'], index=df.index, name='X') s2 = pd.Series(['Y1', 'Y2', 'Y3'], index=df.index, name='Y') df2 = pd.DataFrame({'df_col1': 0, 'df_col2': range(3)}, index=df.index) print(pd.concat([df, s1, s2, df2], axis=1)) # A B C X Y df_col1 df_col2 # ONE A1 B1 C1 X1 Y1 0 0 # TWO A2 B2 C2 X2 Y2 0 1 # THREE A3 B3 C3 X3 Y3 0 2 

Ajouter une ligne ร  un ๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ

Ajouter une ligne en utilisant .๐ฅโ€Œ๐จโ€Œ๐œโ€Œ[]

Vous pouvez sรฉlectionner une ligne en utilisant ๐ฅโ€Œ๐จโ€Œ๐œโ€Œ[๐ซโ€Œ๐จโ€Œ๐ฐโ€Œ_๐งโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ] et lui attribuer des valeurs.

df = pd.DataFrame({'A': ['A1', 'A2', 'A3'], 'B': ['B1', 'B2', 'B3'], 'C': ['C1', 'C2', 'C3']}, index=['ONE', 'TWO', 'THREE']) print(df) # A B C # ONE A1 B1 C1 # TWO A2 B2 C2 # THREE A3 B3 C3 df.loc['ONE'] = 0 print(df) # A B C # ONE 0 0 0 # TWO A2 B2 C2 # THREE A3 B3 C3 

Comme pour les colonnes, en spรฉcifiant un nom de ligne inexistant, vous pouvez ajouter la ligne et lui attribuer des valeurs.

L’approche est la mรชme que pour les colonnes. Vous pouvez attribuer une valeur scalaire ou un objet de type tableau.

df.loc['FOUR'] = 0 df.loc['FIVE'] = ['A5', 'B5', 'C5'] print(df) # A B C # ONE 0 0 0 # TWO A2 B2 C2 # THREE A3 B3 C3 # FOUR 0 0 0 # FIVE A5 B5 C5 

Pour les objets de type tableau, assurez-vous que le nombre d’รฉlรฉments correspond au nombre de colonnes ; sinon, cela provoquera une erreur.

# df.loc['SIX'] = ['A6', 'B6'] # ValueError: cannot set a row with mismatched columns 

Comme les colonnes, S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ peut รฉgalement รชtre assignรฉ aux lignes. Si les รฉtiquettes ne correspondent pas, les valeurs manquantes N๐šโ€ŒN sont attribuรฉes. Si vous souhaitez ignorer les รฉtiquettes, vous pouvez utiliser ๐ฏโ€Œ๐šโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ pour convertir en tableau NumPy ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ .

s = pd.Series(['B6', 'C6', 'D6'], index=['B', 'C', 'D'], name='SIX') print(s) # B B6 # C C6 # D D6 # Name: SIX, dtype: object df.loc['XXX'] = df.loc['TWO'] + df.loc['THREE'] df.loc['YYY'] = s df.loc['ZZZ'] = s.values print(df) # A B C # ONE 0 0 0 # TWO A2 B2 C2 # THREE A3 B3 C3 # FOUR 0 0 0 # FIVE A5 B5 C5 # XXX A2A3 B2B3 C2C3 # YYY NaN B6 C6 # ZZZ B6 C6 D6 

La mรฉthode ๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซ โ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ.๐šโ€Œ๐ฉโ€Œ๐ฉโ€Œ๐žโ€Œ๐งโ€Œ๐โ€Œ() (obsolรจte dans la version 1.4.0 )

La mรฉthode ๐šโ€Œ๐ฉโ€Œ๐ฉโ€Œ๐žโ€Œ๐งโ€Œ๐โ€Œ() รฉtait autrefois utilisรฉe pour ajouter de nouvelles lignes ร  D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ . Cependant, cette mรฉthode a รฉtรฉ dรฉconseillรฉe dans la version 1.4.0 et supprimรฉe dans la version 2.0.0 .

Dans les notes de version, il est recommandรฉ d’utiliser plutรดt la fonction ๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.๐œโ€Œ๐จโ€Œ๐งโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ() .

La fonction ๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.๐œโ€Œ๐จโ€Œ๐งโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ()

Vous pouvez concatรฉner plusieurs objets D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ et S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ ร  l’aide de la fonction ๐œโ€Œ๐จโ€Œ๐งโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ() .

Spรฉcifiez une liste ou un tuple d’objets que vous souhaitez concatรฉner comme premier argument de ๐œโ€Œ๐จโ€Œ๐งโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ() . Par dรฉfaut, ils sont concatรฉnรฉs verticalement.

df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'], 'B': ['B1', 'B2', 'B3'], 'C': ['C1', 'C2', 'C3']}, index=['ONE', 'TWO', 'THREE']) print(df1) # A B C # ONE A1 B1 C1 # TWO A2 B2 C2 # THREE A3 B3 C3 df2 = pd.DataFrame({'B': ['B4', 'B5'], 'C': ['C4', 'C5'], 'D': ['D4', 'D5']}, index=['FOUR', 'FIVE']) print(df2) # B C D # FOUR B4 C4 D4 # FIVE B5 C5 D5 print(pd.concat([df1, df2])) # A B C D # ONE A1 B1 C1 NaN # TWO A2 B2 C2 NaN # THREE A3 B3 C3 NaN # FOUR NaN B4 C4 D4 # FIVE NaN B5 C5 D5 

Pour conserver uniquement les colonnes qui partagent des noms communs, spรฉcifiquesz ๐ฃโ€Œ๐จโ€Œ๐ขโ€Œ๐งโ€Œ=’๐ขโ€Œ๐งโ€Œ๐งโ€Œ๐žโ€Œ๐ซโ€Œ’ .

print(pd.concat([df1, df2], join='inner')) # B C # ONE B1 C1 # TWO B2 C2 # THREE B3 C3 # FOUR B4 C4 # FIVE B5 C5 

Vous devez faire preuve de prudence lorsque vous concatรฉnez D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ et S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ verticalement.

Par dรฉfaut, cela ressemble ร  ceci.

s = pd.Series(['A4', 'B4', 'C4'], index=['A', 'B', 'C'], name='FOUR') print(s) # A A4 # B B4 # C C4 # Name: FOUR, dtype: object print(pd.concat([df1, s])) # A B C 0 # ONE A1 B1 C1 NaN # TWO A2 B2 C2 NaN # THREE A3 B3 C3 NaN # A NaN NaN NaN A4 # B NaN NaN NaN B4 # C NaN NaN NaN C4 

En convertissant S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ en D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ avec la mรฉthode ๐ญโ€Œ๐จโ€Œ_๐Ÿโ€Œ๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ() et en la transposant avec T , vous obtenez un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ sur une seule ligne. Vous pouvez concatรฉner ceci.

print(s.to_frame().T) # A B C # FOUR A4 B4 C4 print(pd.concat([df1, s.to_frame().T])) # A B C # ONE A1 B1 C1 # TWO A2 B2 C2 # THREE A3 B3 C3 # FOUR A4 B4 C4 

Remarque : ajouter un grand nombre de lignes ou de colonnes

Il n’est pas recommandรฉ d’ajouter un grand nombre de lignes ou de colonnes ร  un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆ๐žโ€Œ individuellement en raison de l’inefficacitรฉ.

Par exemple, lorsque vous ajoutez une colonne ร  la fois dans une boucle ๐Ÿโ€Œ๐จโ€Œ๐ซโ€Œ , un message P๐žโ€Œ๐ซโ€Œ๐Ÿโ€Œ๐จโ€Œ๐ซโ€Œ๐ฆโ€Œ๐šโ€Œ๐งโ€Œ๐œโ€Œ๐žโ€ŒW๐šโ€Œ๐ซโ€Œ๐งโ€Œ๐ขโ€Œ๐งโ€Œ๐ โ€Œ est รฉmis. Il semble รชtre รฉmis lorsque vous ajoutez plus de 100 colonnes.

df = pd.DataFrame() for i in range(101): df[i] = 0 # PerformanceWarning: DataFrame is highly fragmented. # This is usually the result of calling `frame.insert` many times, which has poor performance. # Consider joining all columns at once using pd.concat(axis=1) instead. # To get a de-fragmented frame, use `newframe = frame.copy()` 

ร€ moins que vous n’ayez besoin d’utiliser les fonctionnalitรฉs de D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ chaque fois que vous ajoutez une ligne ou une colonne, il est prรฉfรฉrable de tout concatรฉner en une seule fois en utilisant ๐œโ€Œ๐จโ€Œ๐งโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ() , comme le suggรจre le message d’avertissement.

Une comparaison de la vitesse de traitement entre l’ajout un par un et l’ajout de tous en une seule fois sera introduite ร  la fin.

Ajouter plusieurs lignes ร  la fois

Prenons l’exemple suivant : D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ .

df = pd.DataFrame({'col1': [1, 2, 3], 'col2': [10, 20, 30], 'col3': [100, 200, 300]}, index=['row1', 'row2', 'row3']) print(df) # col1 col2 col3 # row1 1 10 100 # row2 2 20 200 # row3 3 30 300 

Ajoutez les donnรฉes et les noms de ligne pour chaque ligne dans des listes distinctes. Bien que le contenu soit simplement crรฉรฉ ici, dans le code rรฉel, il est crรฉรฉ par un traitement de donnรฉes.

l_data = [] l_label = [] for i in range(4, 7): l_data.append([i, i * 10, i * 100]) l_label.append(f'row{i}') print(l_data) # [[4, 40, 400], [5, 50, 500], [6, 60, 600]] print(l_label) # ['row4', 'row5', 'row6'] 

Crรฉez un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ ร  partir de ces listes et des noms de colonnes ๐œโ€Œ๐จโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐งโ€Œ๐ฌโ€Œ du D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ d’origine , et concatรฉnez-le avec le D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ d’origine.

df_append = pd.DataFrame(l_data, index=l_label, columns=df.columns) print(df_append) # col1 col2 col3 # row4 4 40 400 # row5 5 50 500 # row6 6 60 600 df_result = pd.concat([df, df_append]) print(df_result) # col1 col2 col3 # row1 1 10 100 # row2 2 20 200 # row3 3 30 300 # row4 4 40 400 # row5 5 50 500 # row6 6 60 600 

Ajouter plusieurs colonnes ร  la fois

Le concept est le mรชme lors de l’ajout de colonnes que lors de l’ajout de lignes comme dรฉcrit ci-dessus.

Prenons l’exemple suivant : D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ .

df = pd.DataFrame({'col1': [1, 2, 3], 'col2': [10, 20, 30], 'col3': [100, 200, 300]}, index=['row1', 'row2', 'row3']) print(df) # col1 col2 col3 # row1 1 10 100 # row2 2 20 200 # row3 3 30 300 

Ajoutez les donnรฉes et les noms de colonnes pour chaque colonne dans des listes sรฉparรฉes.

l_data = [] l_label = [] for i in range(3, 6): l_data.append([10**i, 2 * 10**i, 3 * 10**i]) l_label.append(f'col{i + 1}') print(l_data) # [[1000, 2000, 3000], [10000, 20000, 30000], [100000, 200000, 300000]] print(l_label) # ['col4', 'col5', 'col6'] 

Crรฉez un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ ร  partir de ces listes et des noms de lignes ๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ du D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ d’origine , et concatรฉnez-le avec le D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ d’origine. Notez que vous devez transposer la liste bidimensionnelle contenant les donnรฉes.

df_append = pd.DataFrame(zip(*l_data), index=df.index, columns=l_label) print(df_append) # col4 col5 col6 # row1 1000 10000 100000 # row2 2000 20000 200000 # row3 3000 30000 300000 df_result = pd.concat([df, df_append], axis=1) print(df_result) # col1 col2 col3 col4 col5 col6 # row1 1 10 100 1000 10000 100000 # row2 2 20 200 2000 20000 200000 # row3 3 30 300 3000 30000 300000 

Comparaison de la vitesse de traitement

Comparez la vitesse de traitement entre l’ajout de lignes ou de colonnes une par une et leur ajout en une seule fois.

Les exemples suivants utilisent la commande magique Jupyter Notebook %%๐ญโ€Œ๐ขโ€Œ๐ฆโ€Œ๐žโ€Œ๐ขโ€Œ๐ญโ€Œ . Notez que ces commandes ne fonctionneront pas si elles sont exรฉcutรฉes en tant que scripts Python.

Dans le cas de l’ajout de 1000 lignes :

%%timeit df_loc = pd.DataFrame([[0, 0, 0], [1, 1, 1], [2, 2, 2]]) for i in range(3, 1003): df_loc.loc[i] = [i] * 3 # 150 ms ยฑ 4.67 ms per loop (mean ยฑ std. dev. of 7 runs, 10 loops each) 

%%timeit df = pd.DataFrame([[0, 0, 0], [1, 1, 1], [2, 2, 2]]) l_data = [] l_label = [] for i in range(3, 1003): l_data.append([i] * 3) l_label.append(i) df_concat = pd.concat([df, pd.DataFrame(l_data, index=l_label, columns=df.columns)]) # 487 ยตs ยฑ 12.5 ยตs per loop (mean ยฑ std. dev. of 7 runs, 1,000 loops each) 

Dans le cas de l’ajout de 1000 colonnes :

%%timeit df_index = pd.DataFrame([[0, 0, 0], [1, 1, 1], [2, 2, 2]]) for i in range(3, 1003): df_index[i] = [0, 1, 2] # 31.2 ms ยฑ 578 ยตs per loop (mean ยฑ std. dev. of 7 runs, 10 loops each) 

%%timeit df = pd.DataFrame([[0, 0, 0], [1, 1, 1], [2, 2, 2]]) l_data = [] l_label = [] for i in range(3, 1003): l_data.append([0, 1, 2]) l_label.append(i) df_concat = pd.concat([df, pd.DataFrame(zip(*l_data), index=df.index, columns=l_label)], axis=1) # 3.56 ms ยฑ 54.7 ยตs per loop (mean ยฑ std. dev. of 7 runs, 100 loops each) 

Dans les deux cas, l’ajout de toutes les lignes ou colonnes en une seule fois s’avรจre nettement plus rapide.