2013-06-16 14 views

risposta

25

È possibile aggiungere utilizzando to_csv passando un file che è open in append mode:

with open(file_name, 'a') as f: 
    df.to_csv(f, header=False) 

Usa header=None, in modo da non aggiungere i nomi delle colonne.

In realtà, i panda ha un wrapper per fare questo in to_csv utilizzando l'argomento mode (see Joe's answer):

df.to_csv(f, mode='a', header=False) 
+1

anche bisogno di chiudere il file da f.close(). Andy, tu sei il mio giorno. Funziona come un fascino, io sono di etnia c/C++ e ho bisogno di imparare la filosofia di Python. Qualche suggerimento? – perigee

+0

Andy, davvero apprezzato :-D (non posso usare il simbolo @ :-() – perigee

+0

Punti bonus che questo chiude il file dopo to_csv. Ho un codice che colpisce to_csv e trovavo i file lasciati aperti su iterazioni successive. –

2

Grazie ad Andy, la soluzione completa:

f = open(filename, 'a') # Open file as append mode 
df.to_csv(f, header = False) 
f.close() 
+5

Solo per citare, questo è essenzialmente equivalente a sopra ma dopo questo si rimane con un file chiuso (f), mentre con ['with' ] (http://preshing.com/20110920/the-python-with-statement-by-example) ripulisce quello per te. :) –

22

È inoltre possibile passare la modalità file come argomento al metodo to_csv

df.to_csv(file_name, header=False, mode = 'a') 
3

una funzione di supporto poco che uso (in base alla risposta di Joe Hooper) con alcune intestazione controllo garanzie per gestire tutto:

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)