मेरे पास एक नया डेटाफ्रेम है, इसे मौजूदा सीएसवी में कैसे जोड़ना है?

मैंने निम्नलिखित कोड की कोशिश की:

f = open('test.csv', 'w')
df.to_csv(f, sep='\t')
f.close()

लेकिन यह test.csv में कुछ भी नहीं जोड़ता है। सीएसवी बड़ा है, मैं पूरे सीएसवी को डेटाफ्रेम के रूप में पढ़ने के बजाय केवल परिशिष्ट का उपयोग करना चाहता हूं और इसे एक नए सीएसवी में लिखना और लिखना चाहता हूं। क्या समस्या को हल करने का कोई अच्छा तरीका है? धन्यवाद।

5
Haven Shi 1 नवम्बर 2017, 19:49

4 जवाब

सबसे बढ़िया उत्तर

ये कोशिश करें:

df.to_csv('test.csv', sep='\t', header=None, mode='a')
# NOTE:                              ----->  ^^^^^^^^   
8
MaxU 1 नवम्बर 2017, 20:00

निम्न कोड आज़माएं, यह आपके स्थानीय फ़ोल्डर में एक पुरानी फ़ाइल (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  
0
Haven Shi 2 नवम्बर 2017, 18:32

एक 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()
0
Nikhil Parashar 2 मार्च 2020, 11:57

TL:DR MaxU का उत्तर सही है।

df.to_csv('old_file.csv', header=None, mode='a')

मुझे एक ही समस्या थी, डेटाफ्रेम में शामिल होना और एक लूप के अंदर एक सीएसवी में सहेजना। ऐसा लगता है कि यह एक सामान्य पैटर्न है। मेरा मानदंड था:

  1. उसी फ़ाइल में वापस लिखें
  2. आवश्यकता से अधिक डेटा न लिखें।
  3. लूप के दौरान डेटाफ़्रेम में नया डेटा जोड़ते रहें।
  4. प्रत्येक पुनरावृत्ति पर सहेजें (लंबे समय तक चलने वाले लूप क्रैश होने की स्थिति में)
  5. अनुक्रमणिका को 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.
1
intotecho 6 मार्च 2019, 09:40