it-swarm.com.de

pandas DataFrame-Ausgabeende von csv

Ich frage mich, wie ich neue DataFrame-Daten an das Ende einer vorhandenen CSV-Datei anhängen kann. Das to_csv erwähnt eine solche Funktionalität nicht. Danke im Voraus.

32
perigee

Sie können mit to_csv anhängen, indem Sie eine Datei übergeben, die im Anhänge-Modus öffnen :

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

Verwenden Sie header=None, Um die Spaltennamen nicht anzufügen.

Tatsächlich hat pandas einen Wrapper, um dies in to_csv Mit dem Argument mode zu tun ( siehe Joes Antwort ):

df.to_csv(f, mode='a', header=False)
59
Andy Hayden

Sie können den Dateimodus auch als Argument an die Methode to_csv übergeben

df.to_csv(file_name, header=False, mode = 'a')
37
Joe Hooper

Eine kleine Hilfsfunktion, die ich (basierend auf der Antwort von Joe Hooper) mit einigen Sicherheitsvorkehrungen für die Header-Überprüfung verwende, um alles zu handhaben:

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)
3
KCzar

Vielen Dank an Andy, die Komplettlösung:

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