2014-09-16 11 views
5

मैं 24 पांडा डेटा निर्यात करने की आवश्यकता पर एक्सेल में पांडा DataFrame लिखने के लिए सबसे तेज़ तरीका एक अलग शीट में (140 कॉलम x 400 पंक्तियाँ)एक्सेल, प्रत्येक के लिए फ्रेम।पायथन: एकाधिक पत्रक

मैं पांडास का उपयोग कर रहा हूं ExcelWriter। 24 परिदृश्यों चल रहा है, यह लेता है:

51 सेकंड एक .xlsx फ़ाइल पर लिखने में

86 सेकंड (xlwt का प्रयोग करके) एक .xls फ़ाइल पर लिखने में एक .xlsm लिखने के लिए (XlsxWriter का प्रयोग करके)

141 सेकंड (कोई एक्सेल उत्पादन) (openpyxl का उपयोग कर)

21 सेकंड बस कार्यक्रम चलाने के लिए दायर

समस्या से

.xls के लिए लिख यह मुझसे कहता है, कि स्प्रेडशीट इसलिए यदि मैं Excel में खोलें, एक स्तंभ का चयन करें, और संख्या को स्वरूपित करने 'अल्पविराम' बटन पर क्लिक, कोई स्वरूपण शैलियों शामिल है: 'शैली नहीं मिला अल्पविराम'। मुझे यह समस्या .xlsx पर लिखने में नहीं मिली है, लेकिन यह धीमी है।

कैसे निर्यात तेजी से बनाने के लिए पर कोई सुझाव? मैं इस समस्या है करने के लिए पहले एक नहीं हो सकता है, फिर भी खोज मंचों और वेबसाइटों के घंटे के बाद मैं किसी भी निश्चित समाधान नहीं मिली है।

केवल एक चीज मैं के बारे में सोच सकते हैं अजगर उपयोग करने के लिए csv फ़ाइलें करने के लिए निर्यात करने के लिए, और फिर एक एक्सेल एकल स्प्रेडशीट में सभी CSV में विलय करने के लिए मैक्रो लिखना है।

.xls फ़ाइल 10 एमबी है, और .xlsx 5.2 एमबी

धन्यवाद!

+0

मुझे लगता है कि आकार में अंतर एक्सेल और विभिन्न फ़ाइल प्रारूपों से उत्पन्न होता है, न कि लेखन विधि से।इसके अलावा - आपको एक स्प्रेडशीट में सीएसवी को मर्ज करने के लिए एक्सेल मैक्रो की आवश्यकता नहीं है, xlwt के साथ एक स्क्रिप्ट लिखना काफी सीधे आगे है। – Korem

+0

हां, ज़ाहिर है, आकार में अंतर xlsx प्रारूप में एम्बेडेड संपीड़न पर निर्भर करता है। यह मुद्दा नहीं है। मुद्दा यह है कि 5 एमबी डेटा लिखने के लिए 60 सेकंड लेना अत्यधिक लगता है। यह देखते हुए कि पाइथन पैकेज इतने धीमे हैं कि एक्सेल में डेटा फ्रेम फ्रेम फ्रेम हैं, क्या वे एक्सेल में सीएसवी को तेजी से लिखेंगे? मेरे पास अभी तक परीक्षण करने का समय नहीं है लेकिन मुझे शक है। मेरी आशा है कि एक्सेल और वीबीए का उपयोग कर सीएसवी विलय करना तेजी से होता। यह थोड़ा निराशाजनक है कि कुछ एमबी डेटा निर्यात करने के रूप में कुछ भी बहुत लंबा लगता है ... –

+0

इसलिए, मैंने कुछ और परीक्षण चलाए हैं: 24 सीएसवी लोड करना और उन्हें एक्सेल फ़ाइल की अलग-अलग चादरों पर रखना: एक्सेल वीबीए मैक्रो: 5 सेकंड। xlsxWriter के साथ पायथन लिपि: 24 सेकंड (34 '{constant_memory': True}, अजीब के साथ)। http://stackoverflow.com/questions/2141967/using-python-to-program-ms-office-macros : http: हो सकता है कि सबसे अच्छा विकल्प इन उदाहरणों में के रूप में, अजगर से VBA मैक्रो को चलाने के लिए है //stackoverflow.com/questions/441758/driving-excel-from-python-in-windows –

उत्तर

6

यहाँ एक benchmark for different Python to Excel modules है।

और यहाँ के लिए 140 कॉलम एक्स (400 x 24) पोस्टिंग के समय पर मॉड्यूल के नवीनतम संस्करण का उपयोग पंक्तियों उत्पादन होता है: परिणामों अजगर पर निर्भर करेगा

Versions: 
    python  : 2.7.7 
    openpyxl : 2.0.5 
    pyexcelerate: 0.6.3 
    xlsxwriter : 0.5.7 
    xlwt  : 0.7.5 

Dimensions: 
    Rows = 9600 (400 x 24) 
    Cols = 140 

Times: 
    pyexcelerate   : 11.85 
    xlwt     : 17.64 
    xlsxwriter (optimised): 21.63 
    xlsxwriter   : 26.76 
    openpyxl (optimised): 95.18 
    openpyxl    : 119.29 

किसी भी बेंचमार्क के रूप में/मॉड्यूल संस्करण, सीपीयू, रैम और डिस्क I/O और बेंचमार्क पर ही। इसलिए अपने परिणामों के लिए इन परिणामों को सत्यापित करना सुनिश्चित करें।

इसके अतिरिक्त, क्योंकि आप विशेष रूप से पांडा के बारे में पूछा, कृपया ध्यान दें कि PyExcelerate isn't supported

+0

मैंने सोचा कि pyexcelerate अप्रचलित था और कई साल पहले xlwt में subsumed किया गया था। क्या यह एक नया संस्करण है और/या पुराने pyexcelerate से असंबंधित है? – JohnE

+0

वह पायएक्ससेलरेटर था। PyExcelerate एक अलग असंबंधित मॉड्यूल है। यह उलझनभरा है। – jmcnamara

+0

आह, यह बताता है। धन्यवाद! और यह बहुत तेजी से दिखता है ... – JohnE

1

क्या इसके लायक है के लिए, यह मैं कैसे xlwt में उत्पादन प्रारूप है। प्रलेखन (या कम से कम था) सुंदर स्पॉटी है इसलिए मुझे इनमें से अधिकतर अनुमान लगाना पड़ा!

import xlwt 

style = xlwt.XFStyle() 
style.font.name = 'Courier' 
style.font.height = 180 
style.num_format_str = '#,##0' 

# ws0 is a worksheet 
ws0.write(row, col, value, style) 

इसके अलावा, मेरा मानना ​​है कि जब एक्सेल में जिसके परिणामस्वरूप स्प्रेडशीट (Office 2010 संस्करण) फ़ॉर्मेट करने के लिए प्रयास करने से मैं अपने त्रुटि संदेश दोहराया। यह अजीब है, लेकिन कुछ ड्रॉप डाउन टूल बार प्रारूप विकल्प काम करते हैं और कुछ नहीं करते हैं। लेकिन ऐसा लगता है कि अगर मैं दाएं क्लिक के माध्यम से "प्रारूप कक्ष" पर जाता हूं तो वे सभी ठीक काम करते हैं।

संबंधित मुद्दे