Ich möchte wissen, ob es möglich ist, mit der Pandas- to_csv()
Funktion einen Datenrahmen zu einer vorhandenen CSV-Datei hinzuzufügen. Die CSV-Datei hat dieselbe Struktur wie die geladenen Daten.
Ich möchte wissen, ob es möglich ist, mit der Pandas- to_csv()
Funktion einen Datenrahmen zu einer vorhandenen CSV-Datei hinzuzufügen. Die CSV-Datei hat dieselbe Struktur wie die geladenen Daten.
Antworten:
Sie können einen Python-Schreibmodus in der Pandas- to_csv
Funktion angeben . Zum Anhängen ist es 'a'.
In deinem Fall:
df.to_csv('my_csv.csv', mode='a', header=False)
Der Standardmodus ist 'w'.
df.to_csv(output_path, mode='a', header=not os.path.exists(output_path))
Sie können an eine CSV anhängen , indem Sie die Datei im Anhänge-Modus öffnen :
with open('my_csv.csv', 'a') as f:
df.to_csv(f, header=False)
Wenn dies Ihre CSV war , foo.csv
:
,A,B,C
0,1,2,3
1,4,5,6
Wenn Sie das lesen und dann anhängen, zum Beispiel df + 6
:
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:
,A,B,C
0,1,2,3
1,4,5,6
0,7,8,9
1,10,11,12
with open(filename, 'a') as f:
df.to_csv(f, header=f.tell()==0)
mode='a'
als Parameter für to_csv
(dhdf.to_csv(f, mode='a', header=f.tell()==0)
Eine kleine Hilfsfunktion, die ich mit einigen Sicherheitsvorkehrungen zur Überprüfung von Headern verwende, um alles zu erledigen:
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)
Anfangs mit einem Pyspark-Datenrahmen beginnen - Ich habe Typkonvertierungsfehler (beim Konvertieren in Pandas-DFs und beim Anhängen an CSV) aufgrund der Schema- / Spaltentypen in meinen Pyspark-Datenrahmen erhalten
Das Problem wurde behoben, indem alle Spalten in jedem df vom Typ string erzwungen und dann wie folgt an csv angehängt wurden:
with open('testAppend.csv', 'a') as f:
df2.toPandas().astype(str).to_csv(f, header=False)
Etwas spät zur Party, aber Sie können auch einen Kontextmanager verwenden, wenn Sie Ihre Datei mehrmals öffnen und schließen oder Daten, Statistiken usw. protokollieren.
from contextlib import contextmanager
import pandas as pd
@contextmanager
def open_file(path, mode):
file_to=open(path,mode)
yield file_to
file_to.close()
##later
saved_df=pd.DataFrame(data)
with open_file('yourcsv.csv','r') as infile:
saved_df.to_csv('yourcsv.csv',mode='a',header=False)`