Tôi muốn biết liệu có thể sử dụng chức năng pandas to_csv()
để thêm một khung dữ liệu vào tệp csv hiện có hay không. Tệp csv có cùng cấu trúc với dữ liệu được tải.Làm cách nào để thêm dữ liệu gấu trúc vào tệp csv hiện có?
Trả lời
Bạn có thể thêm đến một csv bởi opening the file trong chế độ append:
with open('my_csv.csv', 'a') as f:
df.to_csv(f, header=False)
Nếu đây là csv, foo.csv
:
,A,B,C
0,1,2,3
1,4,5,6
Nếu bạn đọc đó và sau đó nối, 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
Cảm ơn bạn @Andy Hayden – Samatix
có thể thêm điều này vào sách dạy nấu ăn? – Jeff
@Jeff oop rõ ràng [this one] (http://stackoverflow.com/questions/17134942/pandas-dataframe-output-end-of-csv) là [đã có] (http://pandas.pydata.org/ pandas-docs/dev/cookbook.html # csv) (Tôi biết tôi đã trả lời câu hỏi này trước đây!) Tôi sẽ lừa nó theo cách khác mặc dù ...: s –
Bạn có thể chỉ định một chế độ python ghi trong gấu trúc to_csv
chức năng. Để gắn thêm nó là 'a'.
Trong trường hợp của bạn:
chế độdf.to_csv('my_csv.csv', mode='a', header=False)
Giá trị mặc định là 'w'.
Một chức năng helper ít tôi sử dụng với một số tiêu đề kiểm tra biện pháp bảo vệ để 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)
Một chút muộn để dự buổi tiệc nhưng bạn cũng có thể sử dụng một trình quản lý nội dung, nếu bạn đang mở và đóng cửa của bạn nộp nhiều lần, hoặc ghi dữ liệu, thống kê, vv
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)`
ban đầu bắt đầu với một dataframes pyspark - tôi đã nhận lỗi chuyển đổi loại hình (khi chuyển sang gấu trúc df và sau đó phụ thêm để csv) cho các loại schema/cột trong pyspark dataframes 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 là kiểu string và sau đó phụ thêm này để csv như sau:
with open('testAppend.csv', 'a') as f:
df2.toPandas().astype(str).to_csv(f, header=False)
Tôi nghĩ rằng phương pháp được đề xuất bởi @tlingf là tốt hơn chỉ vì ông đang sử dụng dựng- trong chức năng của thư viện gấu trúc. Anh ta gợi ý chế độ xác định là "a". "A" là viết tắt của APPEND 'df.to_csv (' my_csv.csv ', chế độ =' a ', tiêu đề = False)' – Ayrat