DataFrameが複数存在した場合にエクセルにシート別で出力できるのかなという疑問から
- VBAしか触ったことがなかったのですが、多岐に自動化できるようになってみたい思いからpythonプログラミングの独学を始めてみて3か月ちょっとの者です。
- コロナ関連の各自治体が出している報告pdfをtabulaで取得してdfに格納していくことに楽しさを感じたので ついでにExcelにシートごとに出力する方法を調べてみたいなと思いながらも調べ方が悪く適当な方法を見つけられずにいましたがもう一度資料参考をしながら作成してみたところうまく出力されたので自分の覚書も兼ねて投稿します。
環境
- windows10 pro 64
- python 3.9
- tabula-py 2.2.0
- pandas 1.3.0
- jupyter-lab 3.0.13
- Excel2019
コード
import pandas as pd
#あとでファイル管理がしやすいように変数日付4桁を作成
datestr = input('四桁で日付を入力')
##以下すでにdfがいくつか存在していることが前提のコードです
#closeを忘れても良いようにwithブロックで pd.ExcelWriter を呼び出しf文字列で入力した日付をファイル名に結合
with pd.ExcelWriter(f'dataframes{datestr}.xlsx', engine='xlsxwriter') as writer:
#for文 range内でlen関数でdfのデータ数を取得
for n in range(0,len(df)):
#dfの数ごとにExcelに出力しシートの名前もデータ番号を付与させる(f文字列でnを反映させる)
df[n].to_excel(writer, sheet_name=f'df{n}', index=False)
参考記事など
【Python】with open構文の使い方について
Pythonのfor文によるループ処理(range, enumerate, zipなど)
補足
- 事前処理としてselenium 処理からheliumでブラウザ操作に変えたり 事後処理としてファイル操作プログラムとかも書いてみたりしていますがそこらへんは割愛して主題部分だけ載せました。
- 実際はtabulaやcamelotなどでpdfを読ませましたが一部の『新規陽性者数』などがなぜか欠損値として出力されたので無料のRPAツール(UiPath community)で画像認識させて欠損値の補完入力をさせてみたりなどしておりすべて自動的に行うというレベルまでにはまだまだ到達できていないなぁ…というのが現状です。