0Pricing
Pandas & NumPy Academy · Leçon

pd.concat pour empiler des DataFrames

Empilez des DataFrames verticalement ou horizontalement avec pd.concat, alignez-les sur l’index ou les colonnes et gérez les index dupliqués.

pd.concat pour empiler des DataFrames est une leçon Pandas & NumPy Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Pandas & NumPy Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Pandas & NumPy Academy comprend 4 leçons au total.

Pourquoi concaténer des DataFrames ?

Dans les projets réels, les données arrivent rarement dans un seul fichier. Vous pouvez disposer de fichiers de ventes mensuels, d’exports d’enquêtes régionales ou de résultats de requêtes de base de données répartis entre plusieurs requêtes. La concaténation empile ces DataFrames distincts pour former un tableau combiné. Pandas fournit pd.concat() à cette fin, en prenant en charge l’empilement vertical, ligne par ligne, comme horizontal, colonne par colonne.

Concaténation verticale de base

L’utilisation la plus courante de pd.concat() consiste à empiler des DataFrames verticalement, c’est-à-dire à ajouter des lignes. Transmettez une liste de DataFrames et la fonction les ajoute les uns sous les autres. Les deux DataFrames doivent avoir des colonnes compatibles pour obtenir un résultat propre. Pandas aligne automatiquement les colonnes selon leur nom et remplit les colonnes manquantes avec NaN.

import pandas as pd

jan = pd.DataFrame({'product': ['A', 'B'], 'sales': [100, 200]})
feb = pd.DataFrame({'product': ['A', 'C'], 'sales': [150, 120]})

combined = pd.concat([jan, feb])
print(combined)
#   product  sales
# 0       A    100
# 1       B    200
# 0       A    150
# 1       C    120

Réinitialiser l’index après une concaténation

Remarquez que pd.concat() conserve les index d’origine de chaque DataFrame, ce qui peut produire des valeurs d’index en double, comme ci-dessus avec deux lignes à l’index 0 et deux à l’index 1. Transmettez ignore_index=True pour créer un nouvel index entier séquentiel dans le résultat combiné ; c’est presque toujours ce que vous souhaitez.

combined = pd.concat([jan, feb], ignore_index=True)
print(combined)
#   product  sales
# 0       A    100
# 1       B    200
# 2       A    150
# 3       C    120

print(combined.index)
# RangeIndex(start=0, stop=4, step=1)

Suivre la source avec des clés

Lorsque vous concaténez des données provenant de plusieurs sources, vous pouvez souhaiter savoir de quel DataFrame d’origine provient chaque ligne. Transmettez le paramètre keys avec une liste d’étiquettes. Pandas crée un MultiIndex dont le niveau externe identifie la source. Vous pouvez ensuite utiliser .loc['label'] pour accéder aux lignes d’une source précise.

combined = pd.concat([jan, feb], keys=['January', 'February'])
print(combined)
#                product  sales
# January   0         A    100
#           1         B    200
# February  0         A    150
#           1         C    120

# Access only February rows
print(combined.loc['February'])

Concaténation horizontale avec axis=1

Transmettez axis=1 pour concaténer les DataFrames côte à côte, c’est-à-dire en ajoutant des colonnes. Pandas les aligne selon l’index des lignes ; les deux DataFrames doivent donc avoir le même index pour obtenir un résultat propre. Si les index diffèrent, les lignes sans correspondance sont remplies avec NaN. Cette technique est utile pour combiner des caractéristiques calculées à partir du même jeu de données au cours d’étapes distinctes.

names = pd.DataFrame({'name': ['Alice', 'Bob', 'Carol']}, index=[1, 2, 3])
scores = pd.DataFrame({'score': [95, 88, 72]}, index=[1, 2, 3])

combined = pd.concat([names, scores], axis=1)
print(combined)
#     name  score
# 1  Alice     95
# 2    Bob     88
# 3  Carol     72

Gérer les colonnes incompatibles

Si les DataFrames concaténés comportent des colonnes différentes, Pandas conserve toutes les colonnes et remplit les valeurs manquantes avec NaN. Il s’agit du comportement par défaut de join='outer'. Si vous souhaitez conserver uniquement les colonnes présentes dans tous les DataFrames, transmettez join='inner' ; toute colonne absente d’une source est alors supprimée.

df1 = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
df2 = pd.DataFrame({'b': [5, 6], 'c': [7, 8]})

# Outer join (default): keeps all columns
print(pd.concat([df1, df2], ignore_index=True))
#      a  b    c
# 0  1.0  3  NaN
# 1  2.0  4  NaN
# 2  NaN  5  7.0
# 3  NaN  6  8.0

# Inner join: keeps only shared columns
print(pd.concat([df1, df2], join='inner', ignore_index=True))
#    b
# 0  3
# 1  4
# 2  5
# 3  6

Concaténer de nombreux fichiers dans une boucle

Lors du chargement de plusieurs fichiers, un modèle courant consiste à rassembler tous les DataFrames dans une liste, puis à appeler pd.concat() une seule fois à la fin. Évitez de concaténer dans une boucle, par exemple avec df = pd.concat([df, new_chunk]), car cela crée une nouvelle copie de DataFrame à chaque itération et entraîne une complexité temporelle quadratique pour les grandes collections.

import glob

# Efficient: collect first, concat once
files = glob.glob('data/sales_*.csv')
frames = [pd.read_csv(f) for f in files]
combined = pd.concat(frames, ignore_index=True)

# Inefficient (avoid):
# result = pd.DataFrame()
# for f in files:
#     result = pd.concat([result, pd.read_csv(f)])  # slow!

Concaténer des Series

pd.concat() fonctionne aussi bien avec les Series qu’avec les DataFrames. Concaténer verticalement une liste de Series produit une Series plus longue. Une concaténation avec axis=1 produit un DataFrame dans lequel chaque Series devient une colonne. Les Series sont alignées selon leur index ; les étiquettes d’index doivent donc correspondre pour obtenir une concaténation horizontale propre.

s1 = pd.Series([1, 2, 3], name='x')
s2 = pd.Series([4, 5, 6], name='y')

# Vertical: one long Series
print(pd.concat([s1, s2]))
# 0    1
# 1    2
# ...

# Horizontal: a DataFrame with two columns
print(pd.concat([s1, s2], axis=1))
#    x  y
# 0  1  4
# 1  2  5
# 2  3  6

Vérifier le résultat concaténé

Après une concaténation, vérifiez toujours que le résultat possède la forme attendue et ne contient pas de valeurs NaN inattendues. Une vérification rapide consiste à comparer le nombre de lignes combiné à la somme des nombres de lignes individuels, puis à appeler isna().sum() pour repérer les valeurs manquantes introduites involontairement par un mauvais alignement des colonnes. Ces vérifications empêchent les problèmes silencieux de qualité des données de se propager dans votre analyse.

combined = pd.concat([jan, feb], ignore_index=True)

# Sanity checks
assert len(combined) == len(jan) + len(feb), 'Row count mismatch'
print('Missing values per column:')
print(combined.isna().sum())
print('Shape:', combined.shape)

concat et append (obsolète)

Les anciens codes Pandas peuvent utiliser df.append(other), qui était un raccourci pratique autour de pd.concat(). Cette méthode a été déclarée obsolète dans Pandas 1.4, puis supprimée dans Pandas 2.0. Utilisez toujours pd.concat([df, other], ignore_index=True) dans le code moderne. Le comportement est identique, mais pd.concat est plus explicite et permet de concaténer plus de deux DataFrames à la fois.

# Old (removed in Pandas 2.0):
# combined = jan.append(feb, ignore_index=True)

# Modern equivalent:
combined = pd.concat([jan, feb], ignore_index=True)
print(combined)

Exemple pratique : rapport annuel des ventes

Voici un modèle réaliste : charger les DataFrames mensuels, ajouter une étiquette de source, les concaténer, puis calculer un résumé pour l’année entière. Le paramètre keys facilite le suivi de chaque ligne jusqu’à son mois, tandis que ignore_index=True, associé à une colonne indiquant le mois, fournit un DataFrame aplati et propre pour l’analyse par groupes.

months = ['jan', 'feb', 'mar']
frames = []
for m in months:
    df = pd.DataFrame({'product': ['A', 'B'], 'sales': [100, 200]})
    df['month'] = m
    frames.append(df)

yearly = pd.concat(frames, ignore_index=True)
print(yearly.groupby('month')['sales'].sum())

Vérification rapide

Vérifiez votre compréhension de pd.concat pour empiler les DataFrames présentés dans cette leçon.

Récapitulatif de la leçon

Dans cette leçon, vous avez appris à empiler des DataFrames verticalement avec pd.concat() et ignore_index=True, à suivre les sources à l’aide du paramètre keys, et à comprendre comment join='inner' vs 'outer' contrôle la gestion des colonnes lorsque les schémas diffèrent. Nous allons maintenant découvrir pd.merge() pour effectuer des join internes et externes de style SQL sur des colonnes clés communes.

Questions Fréquemment Posées

La leçon « pd.concat pour empiler des DataFrames » est-elle gratuite ?

Oui — le texte complet de « pd.concat pour empiler des DataFrames » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Pandas & NumPy Academy, passe à CoddyKit PRO. Le cours Pandas & NumPy Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « pd.concat pour empiler des DataFrames » ?

Empilez des DataFrames verticalement ou horizontalement avec pd.concat, alignez-les sur l’index ou les colonnes et gérez les index dupliqués. Tu pratiques Pandas & NumPy Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Pandas & NumPy Academy ?

Aucune expérience préalable n'est requise. Pandas & NumPy Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « pd.concat pour empiler des DataFrames » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Pandas & NumPy Academy ?

Oui. Chaque leçon Pandas & NumPy Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. pd.concat pour empiler des DataFrames
  2. pd.merge : jointures internes et externes
  3. Jointures gauche et droite
  4. Effectuer une jointure sur l’index
← Retour à Pandas & NumPy Academy