web-dev-qa-db-ja.com

pandas xlsxwriter、フォーマットヘッダー

私はxlsxwriterを使用してpandas 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()

ヘッダーの形式を設定しようとする最後から2番目の行は何もしません。

21
Egor Ignatenkov

最初にデフォルトのヘッダースタイルをリセットする必要があり、それを変更できると思います:

_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

30
jezrael

この投稿に遭遇してPandas 0.20.1。

必要なコードは現在

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

どうやらExcelサブモジュールは自動的にインポートされないので、単にpandas.io.formats.Excel.header_style = None単独でAttributeErrorを発生させます。

24
Ironbeard

pandas 0.20では、受け入れられた回答の解が再び変更されました。

Noneに設定する必要がある形式は、次の場所にあります。

pandas.io.formats.Excel.header_style
4
Alec Hanefeld

for pandas 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 for the header: headercellformat

# [4] write to the 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)
3
eliu