2016-04-18 14 views
13

मैं xlsxwriter का उपयोग कर पांडा डेटाफ्रेम to_excel को सहेज रहा हूं। मैंने हेडर के फ़ॉन्ट को बदलने के अलावा अपने सभी डेटा (कॉलम चौड़ाई, फ़ॉन्ट आकार आदि सेट) को प्रारूपित करने में कामयाब रहा है और मुझे ऐसा करने का तरीका नहीं मिल रहा है। यहां मेरा उदाहरण दिया गया है:पांडा xlsxwriter, प्रारूप शीर्षलेख

import pandas as pd 
data = pd.DataFrame({'test_data': [1,2,3,4,5]}) 
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter') 

data.to_excel(writer, sheet_name='test', index=False) 

workbook = writer.book 
worksheet = writer.sheets['test'] 

font_fmt = workbook.add_format({'font_name': 'Arial', 'font_size': 10}) 
header_fmt = workbook.add_format({'font_name': 'Arial', 'font_size': 10, 'bold': True}) 

worksheet.set_column('A:A', None, font_fmt) 
worksheet.set_row(0, None, header_fmt) 

writer.save() 

शीर्ष रेखा के लिए प्रारूप सेट करने की कोशिश करने वाली अंतिम पंक्ति कुछ भी नहीं करती है। सभी एक साथ

pd.core.format.header_style = None 

:

उत्तर

19

मैं आप पहली बार रीसेट डिफ़ॉल्ट हैडर शैली की जरूरत है, तो आप इसे बदल सकते

import pandas as pd 

data = pd.DataFrame({'test_data': [1,2,3,4,5]}) 
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter') 

pd.core.format.header_style = None 

data.to_excel(writer, sheet_name='test', index=False) 

workbook = writer.book 
worksheet = writer.sheets['test'] 

font_fmt = workbook.add_format({'font_name': 'Arial', 'font_size': 10}) 
header_fmt = workbook.add_format({'font_name': 'Arial', 'font_size': 10, 'bold': True}) 

worksheet.set_column('A:A', None, font_fmt) 
worksheet.set_row(0, None, header_fmt) 

writer.save() 

jmcnamara द्वारा की व्याख्या है, धन्यवाद:

Excel में एक सेल प्रारूप एक पंक्ति प्रारूप को ओवरराइड करता है जो कॉलम प्रारूप को ओवरराइड करता है। pd.core.format.header_style को प्रारूप में परिवर्तित किया गया है और हेडर में प्रत्येक सेल पर लागू किया गया है। जैसे कि डिफ़ॉल्ट को set_row() द्वारा ओवरराइड नहीं किया जा सकता है। pd.core.format.header_style से None का अर्थ है कि हेडर कक्षों में उपयोगकर्ता परिभाषित प्रारूप नहीं है और इस प्रकार इसे set_row() द्वारा ओवरराइड किया जा सकता है।

संपादित करें:

pd.formats.format.header_style = None 

धन्यवाद krvkir: संस्करण में आप के लिए

pd.core.format.header_style = None 

बदलना होगा 0.18.1

+3

अच्छा कामकाज। यह बताने के लिए बस कुछ पृष्ठभूमि है कि यह क्यों काम करता है। एक्सेल में एक सेल प्रारूप एक पंक्ति प्रारूप को ओवरराइड करता है जो कॉलम प्रारूप को ओवरराइड करता है। 'Pd.core.format.header_style' को एक प्रारूप में परिवर्तित किया जाता है और हेडर में प्रत्येक सेल पर लागू होता है। चूंकि डिफ़ॉल्ट को 'set_row()' द्वारा ओवरराइड नहीं किया जा सकता है। 'Pd.core.format.header_style' को' none' 'पर सेट करने का अर्थ है कि हेडर कोशिकाओं में उपयोगकर्ता परिभाषित प्रारूप नहीं है और इस प्रकार प्रारूप को ओवरराइड किया जा सकता है .. – jmcnamara

+4

ऐसा लगता है कि पांडा 0.18.1 में वे 'pd स्थानांतरित हुए। core.format' से 'pd.formats' मॉड्यूल, तो अब किसी को' pd.formats.format.header_style = none' लिखना चाहिए। – krvkir

+0

@krvkir - धन्यवाद, मैं उत्तर में आपकी टिप्पणी जोड़ता हूं। – jezrael

4

पांडा में 0.20 स्वीकृत उत्तर का समाधान फिर से बदल गया।

प्रारूप है कि कोई भी सेट किया जाना चाहिए पर पाया जा सकता:

pandas.io.formats.excel.header_style 
+0

मुझे एट्रिब्यूट एरर मिलता है: 'मॉड्यूल' ऑब्जेक्ट में pd.io.formats.excel.header_style = none के लिए कोई विशेषता 'एक्सेल' नहीं है। पांडो संस्करण 0.20.1। – Devon

+1

यह त्रुटि नीचे @Ironbeard के उत्तर द्वारा सही है। – Devon

19

जो इस पोस्ट भर आता है किसी के लिए एक अद्यतन और पांडा 0.20.1 उपयोग कर रहा है।

ऐसा लगता है आवश्यक कोड अब

import pandas.io.formats.excel 
pandas.io.formats.excel.header_style = None 

जाहिर excel submodule स्वत: आयात नहीं कर रहा है, तो बस एक AttributeError बढ़ा देंगे अकेले pandas.io.formats.excel.header_style = None कोशिश कर रहा।