Maison >développement back-end >Tutoriel Python >Comment puis-je concaténer efficacement plusieurs fichiers CSV dans un seul DataFrame Pandas et suivre la provenance des données ?

Comment puis-je concaténer efficacement plusieurs fichiers CSV dans un seul DataFrame Pandas et suivre la provenance des données ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-22 21:33:18754parcourir

How Can I Efficiently Concatenate Multiple CSV Files into a Single Pandas DataFrame and Track Data Provenance?

Concaténation de plusieurs fichiers CSV dans un seul DataFrame

Énoncé du problème

Pour combiner efficacement plusieurs fichiers CSV dans un DataFrame unifié, une solution concise et fiable est recherchée. Cependant, un obstacle a été rencontré dans la boucle de concaténation.

Solution

Pour résoudre le problème et réussir à concaténer les fichiers CSV, l'extrait de code complet suivant peut être utilisé :

import os
import pandas as pd
from pathlib import Path

path = r'C:\DRO\DCL_rawdata_files'
all_files = Path(path).glob('*.csv')

df = pd.concat((pd.read_csv(f) for f in all_files), ignore_index=True)

Ce code utilise une expression génératrice pour lire chaque fichier CSV individuellement, puis les concatène en un seul DataFrame. Le paramètre ignore_index garantit que le DataFrame concaténé a des index de lignes continus.

Ajout d'informations pour identifier la provenance des données

Dans certains scénarios, il peut être avantageux d'ajouter une colonne au DataFrame concaténé indiquant la source fichier de chaque ligne. Ceci peut être réalisé en utilisant l'une des approches suivantes :

Option 1 : Ajouter un nom de fichier en tant que nouvelle colonne

dfs = []
for f in all_files:
    data = pd.read_csv(f)
    data['file'] = f.stem
    dfs.append(data)

df = pd.concat(dfs, ignore_index=True)

Option 2 : Ajouter un fichier générique Source en tant que nouvelle colonne

dfs = []
for i, f in enumerate(all_files):
    data = pd.read_csv(f)
    data['file'] = f'File {i}'
    dfs.append(data)

df = pd.concat(dfs, ignore_index=True)

Option 3 : Ajouter une source de fichier à l'aide de la liste Compréhension

dfs = [pd.read_csv(f) for f in all_files]
df = pd.concat(dfs, ignore_index=True)
df['Source'] = np.repeat([f'S{i}' for i in range(len(dfs))], [len(df) for df in dfs])

Option 4 : Solution monoligne avec .assign()

df = pd.concat((pd.read_csv(f).assign(filename=f.stem) for f in all_files), ignore_index=True)

En implémentant l'une de ces options, le DataFrame concaténé sera annoté avec des informations permettant de retracer l'origine de chaque ligne.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn