to_csv()
Varolan bir csv dosyasına bir veri çerçevesi eklemek için pandalar işlevini kullanmak mümkün olup olmadığını bilmek istiyorum . Csv dosyası, yüklenen verilerle aynı yapıya sahiptir.
to_csv()
Varolan bir csv dosyasına bir veri çerçevesi eklemek için pandalar işlevini kullanmak mümkün olup olmadığını bilmek istiyorum . Csv dosyası, yüklenen verilerle aynı yapıya sahiptir.
Yanıtlar:
Panda to_csv
işlevinde bir python yazma modu belirleyebilirsiniz . Eklemek için 'a'.
Senin durumunda:
df.to_csv('my_csv.csv', mode='a', header=False)
Varsayılan mod 'w'dir.
df.to_csv(output_path, mode='a', header=not os.path.exists(output_path))
Şunları yapabilirsiniz eklemek tarafından bir csv dosyası açılırken modu ekleme:
with open('my_csv.csv', 'a') as f:
df.to_csv(f, header=False)
Bu sizin CSV'niz olsaydı foo.csv
:
,A,B,C
0,1,2,3
1,4,5,6
Bunu okuyup eklerseniz örneğin 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
dönüşür:
,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'
Bir parametre olarak eksik to_csv
(yanidf.to_csv(f, mode='a', header=f.tell()==0)
Her şeyle başa çıkmak için bazı başlık kontrol önlemleriyle birlikte kullandığım küçük bir yardımcı işlev:
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)
Başlangıçta bir pyspark veri çerçeveleri ile başlayan - benim pyspark veri çerçeveleri şema / sütun türleri göz önüne alındığında (panda df's dönüştürmek ve sonra csv eklerken) tür dönüştürme hataları var
Her df'deki tüm sütunları tür dizesi olmaya zorlayarak ve ardından csv'ye aşağıdaki gibi ekleyerek sorunu çözdü:
with open('testAppend.csv', 'a') as f:
df2.toPandas().astype(str).to_csv(f, header=False)
Partiye biraz geç kaldın, ancak dosyanızı birden çok kez açıp kapatıyorsanız veya veri, istatistik vb. Kaydediyorsanız bir bağlam yöneticisi de kullanabilirsiniz.
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)`