2016-06-28 20 views
6

का उपयोग कर नए डेटाफ्रेम के साथ मौजूदा एक्सेल शीट संलग्न करें वर्तमान में मेरे पास यह कोड है। यह पूरी तरह से काम करता है।पाइथन पांडा

यह एक फ़ोल्डर में एक्सेल फ़ाइलों के माध्यम से लूप होता है, पहले 2 पंक्तियाँ हटा देता है, फिर उन्हें अलग-अलग एक्सेल फाइल के रूप में बाहर की बचत होती है, और यह भी एक संलग्न फाइल के रूप में पाश में फ़ाइलों को बचाता है।

वर्तमान में संलग्न फ़ाइल प्रत्येक बार जब मैं कोड चलाता हूं तो मौजूदा फ़ाइल ओवरराइट करता है।

मैं के नीचे पहले से ही विद्यमान चादर उत्कृष्टता ('master_data.xlsx) के लिए नए डेटा संलग्न करने के लिए

dfList = [] 
path = 'C:\\Test\\TestRawFile' 
newpath = 'C:\\Path\\To\\New\\Folder' 

for fn in os.listdir(path): 
    # Absolute file path 
    file = os.path.join(path, fn) 
    if os.path.isfile(file): 
    # Import the excel file and call it xlsx_file 
    xlsx_file = pd.ExcelFile(file) 
    # View the excel files sheet names 
    xlsx_file.sheet_names 
    # Load the xlsx files Data sheet as a dataframe 
    df = xlsx_file.parse('Sheet1',header= None) 
    df_NoHeader = df[2:] 
    data = df_NoHeader 
    # Save individual dataframe 
    data.to_excel(os.path.join(newpath, fn)) 

    dfList.append(data) 

appended_data = pd.concat(dfList) 
appended_data.to_excel(os.path.join(newpath, 'master_data.xlsx')) 

मैंने सोचा था कि यह एक सरल काम होगा की जरूरत है, लेकिन मैं नहीं लगता है। मुझे लगता है कि मुझे master_data.xlsx फ़ाइल को डेटाफ्रेम के रूप में लाने की आवश्यकता है, फिर नए संलग्न डेटा के साथ इंडेक्स से मिलान करें, और इसे वापस सेव करें। या शायद एक आसान तरीका है। किसी भी मदद की सराहना की है।

+0

भी देख सकते हैं [that] (http://stackoverflow.com/a/36450435/5741205) आप क्या कर रहे हैं? – MaxU

+0

नहीं, बिल्कुल नहीं, मैं मौजूदा शीट को जोड़ने की कोशिश कर रहा हूं, नई चादरें सहेजने की कोशिश नहीं कर रहा हूं। – brandog

उत्तर

8

आप startrow पैरामीटर के साथ संयोजन के रूप में openpyxl इंजन का उपयोग कर सकते हैं:

In [48]: writer = pd.ExcelWriter('c:/temp/test.xlsx', engine='openpyxl') 

In [49]: df.to_excel(writer, index=False) 

In [50]: df.to_excel(writer, startrow=len(df)+2, index=False) 

In [51]: writer.save() 

c: /temp/test.xlsx:

enter image description here

पी एस आप भी अगर आप header=None निर्दिष्ट करने के लिए चाहते हो सकता है कॉलम नाम डुप्लिकेट नहीं करना चाहते हैं ...

UPDAT ई: आप this solution

+0

अरे धन्यवाद, मैं इसका उपयोग कर रहा हूं। (मैं वास्तव में केवल डेटा की 2 पंक्तियों को हटा नहीं रहा हूं, जो कि बड़ी मात्रा में स्वरूपण के लिए केवल एक जगह धारक था।) मुझे इंडेक्स लाइन के बिना मौजूदा शीट के नीचे संलग्न करने की आवश्यकता है। – brandog

+0

@brandog, तो आपको 'हेडर = कोई नहीं' का उपयोग करने की आवश्यकता होगी और आपको एक्सेल फ़ाइल में लाइनों की वर्तमान संख्या गिननी होगी और इसे इस तरह उपयोग करें: 'startrow = curr_count + 1' – MaxU

+0

ओएच, ओह! मुझे पढ़ना याद आती है। हाँ यह मेरे प्रश्न का पूरी तरह से जवाब देता है! धन्यवाद – brandog