python - functions - pandas read_csv dtype example
Pandas DataFrame salida final de CSV (4)
Gracias a Andy, la solución completa:
f = open(filename, ''a'') # Open file as append mode
df.to_csv(f, header = False)
f.close()
Me pregunto cómo agregar nuevos datos de DataFrame al final de un archivo csv existente. El to_csv no menciona tal funcionalidad. Gracias de antemano.
También puede pasar el modo de archivo como un argumento al método to_csv
df.to_csv(file_name, header=False, mode = ''a'')
Una pequeña función auxiliar que utilizo (según la respuesta de Joe Hooper) con algunas salvaguardas de comprobación de encabezado para manejar todo:
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)
Puede adjuntar utilizando to_csv
pasando un archivo que está abierto en modo de adición :
with open(file_name, ''a'') as f:
df.to_csv(f, header=False)
Use header=None
, para no anexar los nombres de columna.
De hecho, pandas tiene un envoltorio para hacer esto en to_csv
usando el argumento de mode
( ver la respuesta de Joe ):
df.to_csv(f, mode=''a'', header=False)