programing

panda xlsxwriter, 표 머리글 형식 지정 - 시트 머리글 아님

starjava 2023. 4. 12. 21:41
반응형

panda xlsxwriter, 표 머리글 형식 지정 - 시트 머리글 아님

xlsxwriter를 사용하여 판다 DataFrame to_excel을 저장하고 있습니다.헤더의 글꼴 변경을 제외한 모든 데이터(컬럼 너비, 글꼴 크기 등)의 포맷을 할 수 있었습니다만, 그 방법을 찾을 수 없었습니다.예를 들어 보겠습니다.

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

모두 함께:

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

편집: 버전0.18.1변해야 한다

pd.core.format.header_style = None

대상:

pd.formats.format.header_style = None

편집: 버전 0.20부터 다시 변경되었습니다.

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

고마워 krvkir

편집: 버전 0.24부터 이 기능이 필요하게 되었습니다.

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

크리스 베키오 고마워요

Panda 0.20.1을 사용하는 모든 사용자를 위한 최신 정보입니다.

필요한 코드는 지금인 것 같습니다.

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

보아하니 그excel서브모듈은 자동으로 Import되지 않기 때문에 단순히 시도만 하면 됩니다.pandas.io.formats.excel.header_style = None혼자서는 할 수 없다AttributeError.

팬더 0.25의 또 다른 옵션(아마도 0.24).최선의 방법은 아니지만, 나한테는 효과가 있었어.

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

팬더 0.24의 경우:

다음 기능은 더 이상 작동하지 않습니다.

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

대신 셀 형식 개체를 만들고 새 셀 형식 개체를 사용하여 한 번에 한 셀씩 첫 번째 행의 내용(헤더)을 다시 쓰십시오.
이제, 당신은 미래의 증거입니다.

다음 유사 코드를 사용합니다.

# [1] write df to excel as usual
writer = pd.ExcelWriter(path_output, engine='xlsxwriter')
df.to_excel(writer, sheet_name, index=False)

# [2] do formats for other rows and columns first

# [3] create a format object with your desired formatting for the header, let's name it: headercellformat

# [4] write to the 0th (header) row **one cell at a time**, with columnname and format
for columnnum, columnname in enumerate(list(df.columns)):
    worksheet.write(0, columnnum, columnname, headercellformat)

팬더 0.20에서 승인된 답변의 해답이 다시 변경되었습니다.

없음으로 설정해야 하는 형식은 다음 사이트에서 찾을 수 있습니다.

pandas.io.formats.excel.header_style

만약 당신이 팬더에 대한 헤더 스타일을 완전히 설정하고 싶지 않다면, 당신은 또한 다른 방법으로 통과할 수 있습니다.header=False로.ExcelWriter:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(3, 5), 
                  columns=pd.date_range('2019-01-01', periods=5, freq='M'))

file_path='output.xlsx'
writer = pd.ExcelWriter(file_path, engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', header=False, index=False )
workbook = writer.book
fmt = workbook.add_format({'num_format': 'mm/yyyy', 'bold': True})
worksheet = writer.sheets['Sheet1']
worksheet.set_row(0, None, fmt)
writer.save()

안타깝게도 add_format은 더 이상 사용할 수 없습니다.

언급URL : https://stackoverflow.com/questions/36694313/pandas-xlsxwriter-format-table-header-not-sheet-header

반응형