Tôi muốn biết liệu có thể sử dụng to_csv()
hàm pandas để thêm một khung dữ liệu vào tệp csv hiện có hay không. Tệp csv có cấu trúc giống như dữ liệu được tải.
Tôi muốn biết liệu có thể sử dụng to_csv()
hàm pandas để thêm một khung dữ liệu vào tệp csv hiện có hay không. Tệp csv có cấu trúc giống như dữ liệu được tải.
Câu trả lời:
Bạn có thể chỉ định chế độ ghi python trong to_csv
chức năng gấu trúc . Để nối thêm nó là 'a'.
Trong trường hợp của bạn:
df.to_csv('my_csv.csv', mode='a', header=False)
Chế độ mặc định là 'w'.
df.to_csv(output_path, mode='a', header=not os.path.exists(output_path))
Bạn có thể chắp thêm vào một csv bằng cách mở tệp ở chế độ chắp thêm:
with open('my_csv.csv', 'a') as f:
df.to_csv(f, header=False)
Nếu đây là csv của bạn , foo.csv
:
,A,B,C
0,1,2,3
1,4,5,6
Nếu bạn đọc nó và sau đó nối thêm, ví dụ 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
trở thành:
,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'
tham số cho to_csv
(ví dụdf.to_csv(f, mode='a', header=f.tell()==0)
Một chức năng trợ giúp nhỏ tôi sử dụng với một số biện pháp bảo vệ kiểm tra tiêu đề để xử lý tất cả:
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)
Ban đầu bắt đầu với một cơ sở dữ liệu pyspark - Tôi đã gặp lỗi chuyển đổi loại (khi chuyển đổi sang pandas df's và sau đó gắn vào csv) với các loại lược đồ / cột trong các cơ sở dữ liệu pyspark của tôi
Đã giải quyết vấn đề bằng cách buộc tất cả các cột trong mỗi df phải là kiểu chuỗi và sau đó nối thêm nó vào csv như sau:
with open('testAppend.csv', 'a') as f:
df2.toPandas().astype(str).to_csv(f, header=False)
Đến bữa tiệc muộn một chút nhưng bạn cũng có thể sử dụng trình quản lý ngữ cảnh, nếu bạn mở và đóng tệp của mình nhiều lần hoặc ghi nhật ký dữ liệu, số liệu thống kê, v.v.
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)`