PythonでExcelをいじるやり方が複数あって混乱したので表にまとめてみた。
##比較表
表が大きいのでQiitaでは書かずにExcelを別サーバーにポスト。
よく使いそうな操作のみ記載。
http://mirutsurumi.html.xdomain.jp/Excel_pylib.html
(適宜更新予定。)
まとめたのは以下のライブラリ。
使い道 | |
---|---|
openpyxl | ExcelをExcelとして扱い、セルの書式などを気にした操作に使う。書籍で説明が多いのはこちら。 |
pandas | Excelの書式などには興味がなく、データの分析のみに特化したい場合に使う。engine変数としてopenpyxl, xlsxwriterも使用可能。 |
xlwings(編集中) | できることはopenpyxlに近いが、操作感が異なる。実行するとExcelそのものが起動し、インタラクティブシェルを使えば中身が変化するのを見ながら操作可能。また公式によるとpandasのdfを読み込むこともできる。VBAの操作もできるため、セル範囲指定はrange("A1:C3")のような指定ができるのも分かりやすい。 |
xlrd, xlwt | openpyxlに近く、その従来版のようなイメージ。pandasにも包含されているためあまりこれ単体で使うことはなさそう。pandasでExcelを操作する際に事前にこれらのインストールが必要。 |
xlsxwriter | openpyxlに近く、その従来版のようなイメージ。pandasにも包含されているためあまりこれ単体で使うことはなさそう。pandasでExcelを操作する際にxlsxwriterを事前にインストール必要。 |
表は簡易参照用のため細かい説明は省略。
なおxlwingsとopenpyxlは下記記事でも比較されている。
https://qiita.com/m5knt/items/ab56f1d0a783f3422ee3
■基本的な手順
【openpyxl, xlrd/xlwt, xlsxwriter】
①ライブラリ名.Workbook() でwbオブジェクト作成
②ws = wb.シート追加関数でwsオブジェクト作成(xlsxwriterはここまで)
③同様にwsからセルオブジェクトまで作成し、あとは好きな関数で操作。
④保存(この段階で新規Excel出現)
【pandas】
①データを設定(pd.read_excelで既存Excel読み込み)※pd.DataFrameで直書きもできる。
②df.locなどでセル値操作やフィルタリング(表未記載だがpivot_tableも使える。)
③df.to_excelで新規Excel化
※runしてみて、ないよと怒られる上記4種ライブラリを逐次インストール。
※Defaultではindex/columnが勝手に追加される上、上書きモードなので別Excelを作るのが安全。
pandas補足
read_excel, to_excel, ExcelWriterの関係性が複雑なので補足する。
■read_excel
既存Excelの指定シート(指定しないと一番左のシート)のデータdfを読み込む。
あくまでもdf(DataFrame型)の読み込みであり、Excel workbook型を定義するわけではない。
■to_excel
指定したExcelファイルにdfを書き込む。
■ExcelWriter
to_excelで書き込み対象とするExcelファイルを定義する。(openpyxlでwbを定義するイメージに近い。)
ExcelWriterを定義しなくてもto_excel(file名)で書き込めてしまうが、with文と組み合わせることで複数シートにデータを一括書き込みできるようになる。
またこれとwith文を組み合わせてExcelファイル名を(場合によってはパスごと)変数化しないとto_excelの記述が冗長になる。
つまるところ記述を簡便にするための存在であり、使用マストではない。