DataFrameをエクセル形式でダウンロード
やりたいこと
DataFrameを使って前処理をした後のデータをエクセルとして出力したい
環境
エクセル関係のライブラリ
エクセル出力に必要なライブラリをインストール
pip install xlrd pip install xlsxwriter
コード
バイナリI/Oにエクセルを書き出して、レスポンスとして返す。
ファイル名に日本語を使うときは、別途処理が必要。(次に記載のURL参照。)
import pandas as pd from io import BytesIO def output_excel(request): # 前処理などしたDataFrame df = execute_some_preprocessing(data) # エクセルをメモリーに保存 bio = BytesIO() writer = pd.ExcelWriter(bio, engine='xlsxwriter') df.to_excel(writer, index=False) writer.save() bio.seek(0) wb = bio.read() # MIMEタイプを指定してエクセルをレスポンスとして返す file_name = 'xxxxxxxxxxxxxxxxxxxxx.xlsx' response = HttpResponse(wb, content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') response['Content-Disposition'] = 'attachment; filename=' + file_name return response
ファイル名を日本語にしたい
参考
python - Django Pandas to http response (download file) - Stack Overflow
pandas - Create an excel file from BytesIO using python - Stack Overflow