Python export multiples de fichiers

Bonjour,

Dans le cadre de mon travail je dois concaténer plusieurs fichiers.

import pandas as pd
import numpy as np
import os

base_path =.....

#import des fichiers 
list_files = os.listdir(base_path)
list_df = []
for f in [f for f in list_files if f.startswith("diners-insolites-")]:
    list_df.append(pd.read_csv(f"{base_path}\\{f}", sep=";"))
diners_2023 = pd.concat(list_df)

Les fichiers sont sous ce format:
diners-insolites_digue-du-large_antony-germani_20230801.csv

Idéalement je souhaiterai que lors de l’import des données, il soit rajouté 3 colonnes:

  • le lieu de l’évènement
  • le chef
  • la date.

Comment puis-je procéder?

Je vous remercie,

Bonjour Anne,

Si je comprends bien ces 3 informations sont dans le nom des CSV, il faut donc :

  1. Extraire les informations nécessaires (lieu de l’évènement, chef et date) à partir du nom du fichier, en utilisant des opérations de manipulation de chaînes (split, slice, etc.).

  2. Ensuite, vous pouvez créer ces colonnes (lieu, chef et date) directement dans le DataFrame en les remplissant avec les informations extraites du nom du fichier.

  3. Enfin, vous pouvez concaténer les DataFrames.

Voici le code modifié avec les explications étape par étape :

import pandas as pd
import numpy as np
import os

base_path = ......

# Import des fichiers et remplissage des listes pour les nouvelles colonnes
list_files = os.listdir(base_path)
list_df = []
for f in [f for f in list_files if f.startswith("diners-insolites-")]:
    df = pd.read_csv(f"{base_path}/{f}", sep=";"))
    
    # Extraction des informations du nom du fichier
    # Exemple de nom de fichier : diners-insolites_digue-du-large_antony-germani_20230801.csv
    filename = f.replace("diners-insolites_", "")  # Retirez la partie "diners-insolites_" du nom du fichier
    chef, lieu_date = filename.split("_")[-2:]  # Obtenez le chef et la partie contenant le lieu et la date
    lieu, date = lieu_date.split("_")[:2]  # Séparez le lieu et la date
 
    # Ajoutez les nouvelles colonnes au DataFrame
    df['lieu'] = lieu
    df['chef'] = chef
    df['date'] = date

    #Ajoutez ce DataFrame à la liste des DataFrames
    list_df.append(df)

# Concaténez les DataFrames
diners_2023 = pd.concat(list_df)

En espérant avoir répondu à votre question,
Gaspard

Je vous remercie pour la rapidité de votre réponse. Ce n’est pas tout à fait cela.
Ces informations sont absentes de mes dataframes que j’importe, il faut donc ajouter une colonne (ou idéalement plusieurs) lors de l’import pour que dans ma dataframe finale je puisse avoir le lieu, le chef et la date de l’évènement.

J’ai oublié de préciser que chaque dataframe est un fichier client de l’évènement qui figure dans son intitulé.

Oui c’est bien cela qui est fait dans le code ci-dessus, il récupère lieu/chef/date depuis l’intitulé et les ajoute dans 3 nouvelles colonnes pour chacun des dataframes avant de tous les concaténer !

(J’ai modifié le code pour qu’il soit un peu plus simple)

Je vais étudier plus précisément votre code.
Voilà ce que j’avais trouvé:
list_files = os.listdir(base_path)
list_df = []
for f in [f for f in list_files if f.startswith(“diners-insolites”)]:
list_df.append(pd.read_csv(f"{base_path}\{f}", sep=";").assign(informations=f))
diner = pd.concat(list_df)

Ou encore plus simple avec les opérations dans pandas :wink:

import pandas as pd
import os

base_path = .....................

list_files = os.listdir(base_path)
list_df = []

for f in [f for f in list_files if f.startswith("diners-insolites-")]:
    df = pd.read_csv(os.path.join(base_path, f), sep=";")
    df['title'] = f.replace("diners-insolites_", "").rstrip(".csv")
    df[['chef', 'lieu', 'date']] = df['title'].str.split('_', 2, expand=True)
    list_df.append(df.drop(columns=['title']))

diners_2023 = pd.concat(list_df)

Je vous remercie pour votre aide, me voilà débloquée :slight_smile: