मेरे पास एक नया डेटाफ्रेम है, इसे मौजूदा सीएसवी में कैसे जोड़ना है?
मैंने निम्नलिखित कोड की कोशिश की:
f = open('test.csv', 'w')
df.to_csv(f, sep='\t')
f.close()
लेकिन यह test.csv में कुछ भी नहीं जोड़ता है। सीएसवी बड़ा है, मैं पूरे सीएसवी को डेटाफ्रेम के रूप में पढ़ने के बजाय केवल परिशिष्ट का उपयोग करना चाहता हूं और इसे एक नए सीएसवी में लिखना और लिखना चाहता हूं। क्या समस्या को हल करने का कोई अच्छा तरीका है? धन्यवाद।
4 जवाब
ये कोशिश करें:
df.to_csv('test.csv', sep='\t', header=None, mode='a')
# NOTE: -----> ^^^^^^^^
निम्न कोड आज़माएं, यह आपके स्थानीय फ़ोल्डर में एक पुरानी फ़ाइल (10 पंक्तियाँ) और नई फ़ाइल (2 पंक्तियाँ) उत्पन्न करेगा। मेरे द्वारा संलग्न करने के बाद, नई सामग्री सभी मिश्रित हो जाती है:
import pandas as pd
import os
dir_path = os.path.dirname(os.path.realpath("__file__"))
print(dir_path)
raw_data = {'HOUR': [4, 9, 12, 7, 3, 15, 2, 16, 3, 21],
'LOCATION': ['CA', 'HI', 'CA', 'IN', 'MA', 'OH', 'OH', 'MN', 'NV', 'NJ'],
'TYPE': ['OLD', 'OLD', 'OLD', 'OLD', 'OLD', 'OLD', 'OLD', 'OLD', 'OLD', 'OLD'],
'PRICE': [4, 24, 31, 2, 3, 25, 94, 57, 62, 70]}
old_file = pd.DataFrame(raw_data, columns = ['HOUR', 'LOCATION', 'TYPE', 'PRICE'])
old_file.to_csv(dir_path+"/old_file.csv",index=False)
raw_data = {'HOUR': [2, 22],
'LOCATION': ['CA', 'MN'],
'TYPE': ['NEW', 'NEW'],
'PRICE': [80, 90]}
new_file = pd.DataFrame(raw_data, columns = ['HOUR', 'LOCATION', 'TYPE', 'PRICE'])
new_file.to_csv(dir_path+"/new_file.csv",index=False)
new_file=dir_path+"/new_file.csv"
df=pd.read_csv(new_file)
df.to_csv('old_file.csv', sep='\t', header=None, mode='a')
यह आ जाएगा:
HOUR LOCATION TYPE PRICE
4 CA OLD 4
9 HI OLD 24
12 CA OLD 31
7 IN OLD 2
3 MA OLD 3
15 OH OLD 25
2 OH OLD 94
16 MN OLD 57
3 NV OLD 62
21 NJ OLD 70
02CANEW80
122MNNEW90
एक csv फ़ाइल में एक पांडा डेटाफ़्रेम जोड़ने के लिए, आप इसे भी आज़मा सकते हैं।
df = pd.DataFrame({'Time':x, 'Value':y})
with open('CSVFileName.csv', 'a+', newline='') as f:
df.to_csv(f, index=False, encoding='utf-8', mode='a')
f.close()
TL:DR MaxU का उत्तर सही है।
df.to_csv('old_file.csv', header=None, mode='a')
मुझे एक ही समस्या थी, डेटाफ्रेम में शामिल होना और एक लूप के अंदर एक सीएसवी में सहेजना। ऐसा लगता है कि यह एक सामान्य पैटर्न है। मेरा मानदंड था:
- उसी फ़ाइल में वापस लिखें
- आवश्यकता से अधिक डेटा न लिखें।
- लूप के दौरान डेटाफ़्रेम में नया डेटा जोड़ते रहें।
- प्रत्येक पुनरावृत्ति पर सहेजें (लंबे समय तक चलने वाले लूप क्रैश होने की स्थिति में)
- अनुक्रमणिका को CSV फ़ाइल में संग्रहीत न करें।
मोड और हेडर के विभिन्न मानों पर ध्यान दें। एक पूर्ण लेखन में, मोड = 'डब्ल्यू' और हेडर = सही है, लेकिन एक परिशिष्ट में, मोड = 'ए' और हेडर = 'गलत'।
import pandas as pd
# Create a CSV test file with 3 rows
data = [['tom', 10], ['nick', 15], ['juli', 14]]
test_df = pd.DataFrame(data, columns = ['Name', 'Age'])
test_df.to_csv('test.csv', mode='w', header=True, index=False)
# Read CSV into a new frame
df = pd.read_csv('test.csv')
print(df)
# MAIN LOOP
# Create new data in a new DataFrame
for i in range(0, 2):
newdata = [['jack', i], ['jill', i]]
new_df = pd.DataFrame(newdata, columns = ['Name', 'Age'])
# Write the new data to the CSV file in append mode
new_df.to_csv('test.csv', mode='a', header=False, index=False)
print('check test.csv')
# Combine the new data into the frame ready for the next loop.
test_df = pd.concat([test_df, new_df], ignore_index=True)
# At completion, it shouldn't be necessary, but to write the complete data
test_df.to_csv('completed.csv', mode='w', header=True, index=False)
# completed.csv and test.csv should be identical.