2016-04-18 28 views
13

Tôi đang lưu gấu trúc DataFrame to_excel bằng xlsxwriter. Tôi đã quản lý để định dạng tất cả các dữ liệu của tôi (thiết lập chiều rộng cột, kích thước phông chữ vv) ngoại trừ thay đổi phông chữ của tiêu đề và tôi không thể tìm thấy cách để làm điều đó. Dưới đây là ví dụ của tôi:pandas xlsxwriter, tiêu đề định dạng

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() 

Dòng áp chót cố gắng đặt định dạng cho tiêu đề không có gì.

Trả lời

19

tôi nghĩ rằng bạn cần reset đầu tiên theo phong cách tiêu đề mặc định, sau đó bạn có thể thay đổi nó:

pd.core.format.header_style = None 

Tất cả với nhau:

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() 

Giải thích bởi jmcnamara, cảm ơn bạn:

Trong Excel định dạng ô ghi đè định dạng hàng ghi đè định dạng cột. pd.core.format.header_style được chuyển đổi thành định dạng và được áp dụng cho từng ô trong tiêu đề. Vì vậy, mặc định không thể bị ghi đè bởi set_row(). Đặt pd.core.format.header_style thành None có nghĩa là các ô tiêu đề không có định dạng do người dùng xác định và do đó nó có thể bị ghi đè bởi set_row().

EDIT: Trong phiên bản 0.18.1 bạn phải thay đổi

pd.core.format.header_style = None 

tới:

pd.formats.format.header_style = None 

nhờ krvkir.

+3

Giải pháp thay thế tốt. Chỉ cần một số nền tảng để giải thích lý do tại sao điều này hoạt động. Trong Excel, định dạng ô ghi đè định dạng hàng sẽ ghi đè định dạng cột. 'Pd.core.format.header_style' được chuyển thành định dạng và được áp dụng cho từng ô trong tiêu đề. Như vậy, mặc định không thể bị ghi đè bởi 'set_row()'. Đặt 'pd.core.format.header_style' thành' None' có nghĩa là ô tiêu đề không có định dạng do người dùng xác định và do đó định dạng có thể bị ghi đè. – jmcnamara

+4

Dường như trong gấu trúc 0,18,1, chúng di chuyển 'pd. core.format' vào mô-đun 'pd.formats', vì vậy bây giờ người ta nên viết 'pd.formats.format.header_style = None'. – krvkir

+0

@krvkir - Cảm ơn bạn, tôi thêm bình luận của bạn để trả lời. – jezrael

4

Trong gấu trúc 0,20, giải pháp của câu trả lời được chấp nhận đã thay đổi một lần nữa.

Các định dạng mà nên được đặt thành Không thể được tìm thấy tại địa chỉ:

pandas.io.formats.excel.header_style 
+0

Tôi nhận AttributeError: đối tượng 'module' không có thuộc tính 'excel' cho pd.io.formats.excel.header_style = None. Pandas phiên bản 0.20.1. – Devon

+1

Lỗi này được sửa bởi câu trả lời của @Ironbeard dưới đây. – Devon

19

Bản cập nhật cho bất cứ ai đi qua bài đăng này và đang sử dụng Pandas 0.20.1.

Có vẻ như mã yêu cầu tại là

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

Rõ ràng excel submodule không nhập khẩu tự động, vì vậy chỉ đơn giản là cố gắng pandas.io.formats.excel.header_style = None mình sẽ nâng cao một AttributeError.

Các vấn đề liên quan