447 Stimmen

Wie füge ich Pandas-Daten zu einer vorhandenen CSV-Datei hinzu?

Ich möchte wissen, ob es möglich ist, die Pandas to_csv()-Funktion zu verwenden, um ein DataFrame zu einer vorhandenen CSV-Datei hinzuzufügen. Die CSV-Datei hat die gleiche Struktur wie die geladenen Daten.

945voto

tlingf Punkte 9574

Sie können einen Python-Schreibmodus in der pandas to_csv Funktion angeben. Für Anhänge ist es 'a'.

In Ihrem Fall:

df.to_csv('my_csv.csv', mode='a', header=False)

Der Standardmodus ist 'w'.

Wenn die Datei möglicherweise anfänglich fehlt, können Sie sicherstellen, dass der Header beim ersten Schreiben gedruckt wird, indem Sie diese Variation verwenden:

output_path='my_csv.csv'
df.to_csv(output_path, mode='a', header=not os.path.exists(output_path))

283voto

Andy Hayden Punkte 324102

Sie können an eine CSV-Datei anhängen, indem Sie die Datei im Anhängemodus öffnen:

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

Wenn dies Ihre CSV-Datei war, foo.csv:

,A,B,C
0,1,2,3
1,4,5,6

Wenn Sie das lesen und dann beispielsweise df + 6 anhängen:

In [1]: df = pd.read_csv('foo.csv', index_col=0)

In [2]: df
Out[2]:
   A  B  C
0  1  2  3
1  4  5  6

In [3]: df + 6
Out[3]:
    A   B   C
0   7   8   9
1  10  11  12

In [4]: with open('foo.csv', 'a') as f:
             (df + 6).to_csv(f, header=False)

foo.csv wird zu:

,A,B,C
0,1,2,3
1,4,5,6
0,7,8,9
1,10,11,12

100voto

SpiralDev Punkte 6411
with open(filename, 'a') as f:
    df.to_csv(f, header=f.tell()==0)
  • Datei erstellen, falls sie nicht existiert, ansonsten anhängen
  • Kopfzeile hinzufügen, wenn die Datei erstellt wird, ansonsten überspringen

25voto

KCzar Punkte 1014

Eine kleine Hilfsfunktion, die ich mit einigen Header-Überprüfungsschutzmechanismen 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("Spalten stimmen nicht überein!! Das Dataframe hat " + str(len(df.columns)) + " Spalten. Die CSV-Datei hat " + str(len(pd.read_csv(csvFilePath, nrows=1, sep=sep).columns)) + " Spalten.")
    elif not (df.columns == pd.read_csv(csvFilePath, nrows=1, sep=sep).columns).all():
        raise Exception("Spalten und Spaltenreihenfolge des Dataframes und der CSV-Datei stimmen nicht überein!!")
    else:
        df.to_csv(csvFilePath, mode='a', index=False, sep=sep, header=False)

6voto

Grant Shannon Punkte 3862

Anfangs begann ich mit einem Pyspark-Datensatz - ich bekam Typkonvertierungsfehler (beim Konvertieren in Pandas-Datenrahmen und dann Anhängen an CSV), aufgrund der Schema-/Spaltentypen in meinen Pyspark-Datensätzen

Das Problem wurde gelöst, indem alle Spalten in jedem Datenrahmen gezwungen wurden, vom Typ String zu sein, und dann dies wie folgt an CSV angehängt wurde:

with open('testAppend.csv', 'a') as f:
    df2.toPandas().astype(str).to_csv(f, header=False)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X