Chcę wiedzieć, czy można użyć to_csv()funkcji pandy, aby dodać ramkę danych do istniejącego pliku csv. Plik csv ma taką samą strukturę jak ładowane dane.
Myślę, że metoda sugerowana przez @tlingf jest lepsza tylko dlatego, że korzysta z wbudowanej funkcjonalności biblioteki pand. Sugeruje zdefiniowanie trybu jako „a”. „A” oznacza APPEND ”df.to_csv („ my_csv.csv ”, mode =„ a ”, header = False)”
Ayrat,
1
Odpowiedź @KCzar uwzględnia zarówno przypadki, w których nie ma pliku CSV (tj. Dodaj nagłówek kolumny), jak i gdy plik CSV już tam jest (więc dodaj tylko wiersze danych bez nagłówków). W każdym razie używa trybu „dołącz” i niestandardowego separatora, a także sprawdza liczbę kolumn.
TPPZ
Odpowiedzi:
542
Możesz określić tryb zapisu python w to_csvfunkcji pandy . W przypadku dołączania jest to „a”.
Dziękuję za odpowiedź. Pozwoli mi to dodać nowy plik df w wierszu. Ale czy możesz dać mi znać, jak mogę dołączyć nowy plik df w kolumnie?
datanew
Udało mi się to zrobić, ponownie czytając plik „my_csv.csv”, a następnie skonkatować nowy plik df, a następnie zapisać go. Jeśli znasz jakąś łatwiejszą metodę, daj mi znać. Doceniam!
datanew
2
Jak napisać nagłówek dla pierwszego pliku, a reszta wierszy zostanie do niego automatycznie dołączona?
Etisha
4
@Etisha coś w styludf.to_csv(output_path, mode='a', header=not os.path.exists(output_path))
Michele Tonutti
255
Możesz dołączyć do pliku CSV, otwierając plik w trybie dołączania:
with open('my_csv.csv','a')as f:
df.to_csv(f, header=False)
Jeśli to był twój plik CSV foo.csv:
,A,B,C
0,1,2,31,4,5,6
Jeśli to czytasz, a następnie dołącz, na przykład df + 6:
In[1]: df = pd.read_csv('foo.csv', index_col=0)In[2]: df
Out[2]:
A B C
01231456In[3]: df +6Out[3]:
A B C
07891101112In[4]:with open('foo.csv','a')as f:(df +6).to_csv(f, header=False)
Brakuje mode='a'jako parametru do to_csv(tj.df.to_csv(f, mode='a', header=f.tell()==0)
Gabriela Melo
2
@GabrielaMelo To zostało przekazane w funkcji open (nazwa pliku, „a”).
Piyush
21
Mała funkcja pomocnika, której używam z pewnymi zabezpieczeniami sprawdzania nagłówka, aby obsłużyć to wszystko:
def appendDFToCSV_void(df, csvFilePath, sep=","):import os
ifnot 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):raiseException("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.")elifnot(df.columns == pd.read_csv(csvFilePath, nrows=1, sep=sep).columns).all():raiseException("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)
Początkowo zaczynając od ramek danych pyspark - dostałem błędy konwersji typu (podczas konwersji do pandas df, a następnie dołączenia do csv), biorąc pod uwagę typy schematu / kolumny w moich ramkach danych pyspark
Rozwiązano problem, zmuszając wszystkie kolumny w każdym pliku df do typu ciąg, a następnie dołączając to do pliku csv w następujący sposób:
with open('testAppend.csv','a')as f:
df2.toPandas().astype(str).to_csv(f, header=False)
Odpowiedzi:
Możesz określić tryb zapisu python w
to_csv
funkcji pandy . W przypadku dołączania jest to „a”.W Twoim przypadku:
Domyślnym trybem jest „w”.
źródło
df.to_csv(output_path, mode='a', header=not os.path.exists(output_path))
Możesz dołączyć do pliku CSV, otwierając plik w trybie dołączania:
Jeśli to był twój plik CSV
foo.csv
:Jeśli to czytasz, a następnie dołącz, na przykład
df + 6
:foo.csv
staje się:źródło
źródło
mode='a'
jako parametru doto_csv
(tj.df.to_csv(f, mode='a', header=f.tell()==0)
Mała funkcja pomocnika, której używam z pewnymi zabezpieczeniami sprawdzania nagłówka, aby obsłużyć to wszystko:
źródło
Początkowo zaczynając od ramek danych pyspark - dostałem błędy konwersji typu (podczas konwersji do pandas df, a następnie dołączenia do csv), biorąc pod uwagę typy schematu / kolumny w moich ramkach danych pyspark
Rozwiązano problem, zmuszając wszystkie kolumny w każdym pliku df do typu ciąg, a następnie dołączając to do pliku csv w następujący sposób:
źródło
Trochę późno na imprezę, ale możesz również użyć menedżera kontekstu, jeśli otwierasz i zamykasz plik wiele razy lub logujesz dane, statystyki itp.
źródło