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:
Si je comprends bien ces 3 informations sont dans le nom des CSV, il faut donc :
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.).
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.
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
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)