Je me demande comment ajouter de nouvelles données DataFrame à la fin d'un fichier csv existant? Le to_csv ne mentionne pas une telle fonctionnalité. Merci d'avance.
Vous pouvez ajouter en utilisant to_csv
en passant un fichier qui est ouvert en mode ajout :
with open(file_name, 'a') as f:
df.to_csv(f, header=False)
Utilisez header=None
, afin de ne pas ajouter les noms des colonnes.
En fait, pandas a un wrapper pour le faire dans to_csv
en utilisant l'argument mode
( voir la réponse de Joe ):
df.to_csv(f, mode='a', header=False)
Vous pouvez également passer le mode fichier comme argument à la méthode to_csv
df.to_csv(file_name, header=False, mode = 'a')
Une petite fonction d'aide que j'utilise (basée sur la réponse de Joe Hooper) avec quelques sauvegardes de vérification d'en-tête pour gérer tout cela:
def appendDFToCSV_void(df, csvFilePath, sep=","):
import os
if not os.path.isfile(csvFilePath):
df.to_csv(csvFilePath, mode='a', index=False, sep=sep)
Elif len(df.columns) != len(pd.read_csv(csvFilePath, nrows=1, sep=sep).columns):
raise Exception("Columns do not match!! Dataframe has " + str(len(df.columns)) + " columns. CSV file has " + str(len(pd.read_csv(csvFilePath, nrows=1, sep=sep).columns)) + " columns.")
Elif not (df.columns == pd.read_csv(csvFilePath, nrows=1, sep=sep).columns).all():
raise Exception("Columns and column order of dataframe and csv file do not match!!")
else:
df.to_csv(csvFilePath, mode='a', index=False, sep=sep, header=False)
Merci à Andy, la solution complète:
f = open(filename, 'a') # Open file as append mode
df.to_csv(f, header = False)
f.close()