Bagaimana cara menambahkan data panda ke file csv yang ada?
259
Saya ingin tahu apakah mungkin menggunakan to_csv()fungsi panda untuk menambahkan dataframe ke file csv yang ada. File csv memiliki struktur yang sama dengan data yang dimuat.
Saya pikir metode yang disarankan oleh @tlingf lebih baik hanya karena dia menggunakan fungsi built-in panda library. Dia menyarankan mendefinisikan mode sebagai "a". "A" adalah singkatan dari APPEND 'df.to_csv (' my_csv.csv ', mode =' a ', header = False)'
Ayrat
1
Jawaban dari @KCzar mempertimbangkan kedua kasus ketika file CSV tidak ada (yaitu menambahkan header kolom) dan ketika CSV sudah ada di sana (jadi tambahkan hanya baris data tanpa header). Dalam kasus apa pun ia menggunakan mode "tambahkan" dan pemisah kustom, bersama dengan pemeriksaan pada jumlah kolom.
TPPZ
Jawaban:
544
Anda dapat menentukan mode tulis python dalam to_csvfungsi panda . Untuk menambahkannya adalah 'a'.
Terima kasih atas jawabannya. Ini akan memungkinkan saya menambahkan df baru pada baris-bijaksana. Tapi bisakah Anda memberi tahu saya bagaimana saya dapat menambahkan df baru pada kolom-bijaksana?
datanew
Saya dapat mencapainya dengan membaca kembali 'my_csv.csv', kemudian melakukan concat df baru, dan kemudian menyimpannya. Jika Anda tahu beberapa metode yang lebih mudah, silakan LAKUKAN. Saya menghargai!
datanew
2
Bagaimana cara menulis tajuk untuk file pertama dan baris lainnya ditambahkan secara otomatis?
Etisha
4
@Etisha sesuatu sepertidf.to_csv(output_path, mode='a', header=not os.path.exists(output_path))
Michele Tonutti
255
Anda dapat menambahkan ke csv dengan membuka file dalam mode append:
with open('my_csv.csv','a')as f:
df.to_csv(f, header=False)
Jika ini adalah csv Anda, foo.csv:
,A,B,C
0,1,2,31,4,5,6
Jika Anda membaca itu dan kemudian append, misalnya, 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)
Tidak ada mode='a'sebagai parameter untuk to_csv(yaitudf.to_csv(f, mode='a', header=f.tell()==0)
Gabriela Melo
2
@GabrielaMelo Yang disahkan dalam fungsi terbuka (nama file, 'a').
Piyush
21
Sebuah fungsi pembantu kecil yang saya gunakan dengan beberapa pengamanan header untuk menangani semuanya:
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)
Awalnya dimulai dengan kerangka data pyspark - Saya mendapat kesalahan konversi jenis (saat mengonversi ke panda df dan kemudian menambahkan ke csv) mengingat skema / kolom jenis dalam kerangka data pyspark saya
Memecahkan masalah dengan memaksa semua kolom di setiap df menjadi tipe string dan kemudian menambahkan ini ke csv sebagai berikut:
with open('testAppend.csv','a')as f:
df2.toPandas().astype(str).to_csv(f, header=False)
Agak terlambat ke pesta tetapi Anda juga dapat menggunakan manajer konteks, jika Anda membuka dan menutup file Anda beberapa kali, atau mencatat data, statistik, dll.
from contextlib import contextmanager
import pandas as pd
@contextmanagerdef 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)`
Jawaban:
Anda dapat menentukan mode tulis python dalam
to_csv
fungsi panda . Untuk menambahkannya adalah 'a'.Dalam kasus Anda:
Mode standar adalah 'w'.
sumber
df.to_csv(output_path, mode='a', header=not os.path.exists(output_path))
Anda dapat menambahkan ke csv dengan membuka file dalam mode append:
Jika ini adalah csv Anda,
foo.csv
:Jika Anda membaca itu dan kemudian append, misalnya,
df + 6
:foo.csv
menjadi:sumber
sumber
mode='a'
sebagai parameter untukto_csv
(yaitudf.to_csv(f, mode='a', header=f.tell()==0)
Sebuah fungsi pembantu kecil yang saya gunakan dengan beberapa pengamanan header untuk menangani semuanya:
sumber
Awalnya dimulai dengan kerangka data pyspark - Saya mendapat kesalahan konversi jenis (saat mengonversi ke panda df dan kemudian menambahkan ke csv) mengingat skema / kolom jenis dalam kerangka data pyspark saya
Memecahkan masalah dengan memaksa semua kolom di setiap df menjadi tipe string dan kemudian menambahkan ini ke csv sebagai berikut:
sumber
Agak terlambat ke pesta tetapi Anda juga dapat menggunakan manajer konteks, jika Anda membuka dan menutup file Anda beberapa kali, atau mencatat data, statistik, dll.
sumber