こんにちは、snuowです。
エクセルでヒートマップを作るために、セルで条件付き書式を設定することがありますよね?
pythonでヒートマップを作ることは容易にできますが、pythonからエクセルのシートに条件付き書式を設定することができることはご存じですか?
今回は、pythonのxlsxwriterとpandasを使って、条件付き書式が設定されたエクセルのシートを出力する方法をご紹介します。
こんな感じの条件付き書式を設定したエクセルのシートを作成できます。
こんな感じのエクセルシートを作成することができます。今回は簡単のためにB2:C3
のみ条件付き書式を設定しています。

条件付き書式を設定したエクセルのシートを作成する。
SampleCode
下記のコードで実装できます。
# xl_rangeを使えば、"B2:C3"をxl_range(2,2,3,3)と表現できる。 from xlsxwriter.utility import xl_range import xlsxwriter import pandas as pd import numpy as np # test用データフレーム df = pd.DataFrame(np.arange(0,9,1).reshape(3,3)) # workbook生成 workbook = xlsxwriter.Workbook(r'./output_storage/hoge.xlsx') # xlsxwriterでは、mode='a'は使えない。 writer = pd.ExcelWriter(r'./output_storage/hoge.xlsx',mode='w',engine='xlsxwriter') sheet_name = 'hoge' # データフレームをシートに書き込む df.to_excel(writer,sheet_name=sheet_name,startrow=0,index_label='huga') # 条件付き書式の設定 ws = writer.sheets[sheet_name] ws.conditional_format(xl_range(2,2,3,3), {'type': '3_color_scale', 'min_color': "#44c242", 'mid_color': "#ebeb44", 'max_color': "#eb4444"}) writer.close()
解説
ライブラリは、下記を読み込みます。numpy
はサンプルのデータを作る目的でimportしています。
# xl_rangeを使えば、"B2:C3"をxl_range(2,2,3,3)と表現できる。 from xlsxwriter.utility import xl_range import xlsxwriter import pandas as pd import numpy as np
エクセルシートに書き込むために、データフレームを作成しています。既存のデータがある場合は、そちらを読み込んでデータフレームにしてください。
# test用データフレーム df = pd.DataFrame(np.arange(0,9,1).reshape(3,3))

書き込むためのエクセルのworkbookを作成しています。
今回は、/output_storage/hoge.xlsx
にファイルを作成しています。また、シートの名前はhoge
シートとしています。
# workbook生成 workbook = xlsxwriter.Workbook(r'./output_storage/hoge.xlsx') # xlsxwriterでは、mode='a'は使えない。 writer = pd.ExcelWriter(r'./output_storage/hoge.xlsx',mode='w',engine='xlsxwriter') sheet_name = 'hoge' # データフレームをシートに書き込む df.to_excel(writer,sheet_name=sheet_name,startrow=0,index_label='huga')
最後のこのコードでシートに条件付き書式を設定します。.conditional_format()
で条件付き書式を設定できます。
xl_range()
で、範囲指定を行っており、xl_range(2,2,3,3)
はB2:C3
を意味しています。
***_colorは、それぞれ色を指定しており、エクセルで言うところの下記の部分に当てはまります。

# 条件付き書式の設定 ws = writer.sheets[sheet_name] ws.conditional_format(xl_range(2,2,3,3), {'type': '3_color_scale', 'min_color': "#44c242", 'mid_color': "#ebeb44", 'max_color': "#eb4444"}) writer.close()
いかがだったでしょうか。こんな形でデータフレームから簡単に条件付き書式を設定したエクセルシートを作ることができます。
これを利用することで、エクセルしか使えないお客様相手の提出にも困ることが減ると思います。
コメント