मैं जानना चाहता हूं कि क्या to_csv()
किसी मौजूदा सीएसवी फाइल में डेटाफ्रेम जोड़ने के लिए पांडा फ़ंक्शन का उपयोग करना संभव है । सीएसवी फ़ाइल में लोड किए गए डेटा के समान संरचना है।
मैं जानना चाहता हूं कि क्या to_csv()
किसी मौजूदा सीएसवी फाइल में डेटाफ्रेम जोड़ने के लिए पांडा फ़ंक्शन का उपयोग करना संभव है । सीएसवी फ़ाइल में लोड किए गए डेटा के समान संरचना है।
जवाबों:
आप पांडा to_csv
फ़ंक्शन में एक पायथन लेखन मोड निर्दिष्ट कर सकते हैं । परिशिष्ट के लिए यह 'क' है।
आपके मामले में:
df.to_csv('my_csv.csv', mode='a', header=False)
डिफ़ॉल्ट मोड 'w' है।
df.to_csv(output_path, mode='a', header=not os.path.exists(output_path))
आप कर सकते हैं संलग्न द्वारा एक csv करने के लिए फ़ाइल खोलने संलग्न मोड में:
with open('my_csv.csv', 'a') as f:
df.to_csv(f, header=False)
यदि यह आपका सीएसवी था foo.csv
,:
,A,B,C
0,1,2,3
1,4,5,6
यदि आप इसे पढ़ते हैं और फिर संलग्न करते हैं, उदाहरण के लिए 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
हो जाता है:
,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'
एक पैरामीटर के रूप में गायब है to_csv
(यानीdf.to_csv(f, mode='a', header=f.tell()==0)
थोड़ा हेल्पर फंक्शन जो मैं कुछ हेडर के साथ उपयोग करता हूँ जो यह सब संभालने के लिए सुरक्षा उपायों की जाँच करता है:
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)
शुरू में एक pyspark डेटाफ्रेम के साथ शुरू - मुझे टाइप कन्वर्सेशन एरर मिला (जब pandas df में बदलना और फिर csv में अप्लाई करना) मेरे pyspark डेटाफ्रेम में स्कीमा / कॉलम प्रकार दिए गए
प्रत्येक df में सभी स्तंभों को टाइप स्ट्रिंग के लिए बाध्य करके समस्या को हल किया और फिर इसे csv में निम्नानुसार जोड़ा:
with open('testAppend.csv', 'a') as f:
df2.toPandas().astype(str).to_csv(f, header=False)
पार्टी में थोड़ा देर से लेकिन आप एक संदर्भ प्रबंधक का उपयोग भी कर सकते हैं, यदि आप अपनी फ़ाइल को कई बार खोल रहे हैं या बंद कर रहे हैं, या डेटा, आँकड़े आदि लॉग कर रहे हैं।
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)`