C#でExcelを読み書きする場合、NuGet で 必要なライブラリ(NPOI、NetOffice、ClosedXmlなど)をインストールしなければなりませんが、Pythonの場合は pandas を使いることで実現できます。
今回は、pandas を使ったExcelの読み書き方法について解説します。
説明に使うEXCELについて
今回は下記の通り4月、5月、6月、7月の4シートが含まれているEXCELファイルを使います。

EXCELの読み込み
EXCELの読み込みは pandas の to_excel メソッドを使います。
to_read と同じく、データフレームのインスタンスには to_excel はありませんので、pandas の メソッドとして実行します。
to_excel
to_excel メソッドの書式は次の通りです。
pd.to_excel(ファイル名,sheet_name=シート番号又はシート名)
ファイル名は漢字が含まれていても問題なく読み込めます。
sheet_name には読み込みたいシートを指定しますが、指定の方法によってどのような動作になるかを一覧にまとめてみました。
sheet_nameの値 | 動作 | 例 |
---|---|---|
省略 | 最初の1シート目が読み込まれる | |
Noneを指定 | 全てのシートが読み込まれる | sheet_name=None |
シート番号又はシート名を 1つだけ指定 | 指定したシートが読み込まれる | sheet_name=1 sheet_name=’5月’ |
シート番号又はシート名を リスト形式で指定 | 指定した複数シートが読み込まれる | sheet_name=[0,1] seet_name=[‘4月’,’5月’] |
1 2 3 4 5 6 |
import pandas as pd pd.read_excel('d:\click.xlsx') pd.read_excel('d:\click.xlsx',sheet_name=None) pd.read_excel('d:\click.xlsx',sheet_name='5月') pd.read_excel('d:\click.xlsx',sheet_name=[1,'6月']) |
読み込んだ後の値の取り出し方
sheet_name を省略するか、1つだけ指定する場合、戻り値は データフレームとして返されますが、複数指定した場合は、データフレームがOrderedDict(読み込んだ順番が保証される辞書)に格納されて返されます。
記述方法 | 戻り値のデータ型 |
---|---|
pd.read_excel(‘d:\click.xlsx’) pd.read_excel(‘d:\click.xlsx’,sheet_name=’5月’) | 単一のデータフレームとして返る |
pd.read_excel(‘d:\click.xlsx’) pd.read_excel(‘d:\click.xlsx’,sheet_name[‘5月’]) pd.read_excel(‘d:\click.xlsx’,sheet_name=[1,’6月’]) | データフレームがOrderedDictに格納されて返る |
sheet_nameにリストで渡す場合は1つしかシートを指定していなくてもOrderedDictとして返されるので注意しましょう。

OrderedDictから値を取り出すのは、辞書名[キー] ですから、次のようになります。
1 2 |
dic = pd.read_excel('d:\click.xlsx',sheet_name=[1,'6月'] df = dic['6月'] |
インデックスについて
read_excel メソッドでEXCELファイルを読み込んだ場合も、to_readでCSVファイルを読み込んだ時と同様に自動で連番のインデックス(行ラベル)が左端に追加されます。

EXCELの書き込み
EXCELへの書き込みの際は、データフレームのインスタンスに実装されている to_excel メソッドを使います。
to_excel メソッドの内部では、xlrdライブラリ(EXCELデータをPythonで読むため)とopenpyxlライブラリ(EXCELファイルの操作)を呼び出しており、環境によっては別途インストールが必要になります。
ライブラリのインストール
Python 3.8.5 であれば pandas をインポートするだけで使うことが出来ますが、もしエラーが出る用なら、次のコマンドでインストールすることが可能です。
1 2 3 4 5 6 7 |
#PIPによるインストール pip install xlwt pip install openpyxl #anaconda によるインストール conda install -c anaconda xlwt conda install -c anaconda openpyxl |
to_excel
to_excel はデータフレームのインスタンスに実装されており、書式は次の通りです。
df.to_excel(ファイル名,sheet_name=シート名)
注意点として、sheet_name は 1つしかシートを指定できません。リスト形式で渡すとエラーになります。
言い換えると、to_excel で書き込めるのは指定したシート名1つのみです。
sheet_name を省略すると、’Sheet1′ というシート名で書き込まれます。
1 2 3 4 5 6 7 8 9 |
#EXCELファイルに含まれる全てのシートを読み込む dic = pd.read_excel('d:\click.xlsx',sheet_name=None) #シート名が'6月'のシート(データフレーム)を取得する df.dic['6月'] //EXCEL に書き込む df.to_excel('d:\click.xlsx') df.to_excel('d:\click.xlsx',sheet_name='月度') |

インデックスについて
単純にEXCELに書き込むと、インデックス(行ラベル)とヘッダが出力されます。
ヘッダはともかくとして、インデックスはpandas が自動で付けたものなので、EXCELに書き込みたくない場合が多いと思います。

インデックスを書き込みたく無い場合は index=False、ヘッダを書き込みたくない場合は header=Falseを引数に記述することで解決出来ます。
1 |
df.to_excel('d:\click.xlsx', index=False, header=False) |
複数シートを1つのEXCELに書き込むには
先ほど、to_excel は1つのシートしか書き込めないことを説明しました。
では、読み込んだ全てのシートを1つのEXCELファイルに保存するにはどうすればいいでしょうか。
もっというと、異なるデータフレームの内容を、1つのEXCELファイルに複数シートに分けて追加する場合、同記述すれば良いでしょう。
答えは、pandas のExcelWriter のブロックを使います。
with pd.ExelWriter(ファイル名) as writer :
例えば、’5月’と’6月’ のシートを書き込みたい場合は次のようになります。
1 2 3 |
with pd.ExcelWriter('d:\output.xlsx') as writer: df.to_excel(writer, sheet_name='5月') df.to_excel(writer, sheet_name='6月') |
この方法を使うと、EXCELファイルから読み込んだ全てのシートを、そのまま別のEXCELファイルとして書き込むことが出来ます。
1 2 3 4 5 6 7 |
#指定したEXCELに含まれる全てのシートを読み込む dic = pd.read_excel('d:\input.xlsx',sheet_name=None) #読み込んだシートを全てEXCELに書き込む with pd.ExcelWriter('d:\output.xlsx') as writer: for key in dic: dic[key].to_excel(writer,sheet_name=key) |
read_excel/to_excelで出来ること、出来ないこと
pandas を使うといとも簡単にEXCELファイルの読み書きが出来したが、では罫線を書いたり文字色や背景色を変えたり・・・といったことはどうやればいいのでしょうか。
残念ながら、pandas の機能ではEXCELファイルを読み書きすることしか出来ません。
本格的にEXCELファイルを編集したい場合は、openpyxl というライブラリを使う必要があります。
紙面の関係上、ここでは扱いませんので、また別の記事で紹介したいと思います。
まとめ
今回は pandas を使って簡単にEXCEL ファイルに対する読み書きができることを解説しました。
綺麗にレイアウトを整えてEXCELファイルを作ることは出来ませんが、単純にEXCELのシートに格納されているデータを読み込んで処理したり、その結果をEXCELに書き戻すという程度であれば、pandas の read_excel、to_excel だけで十分ではないかと思います。
もしEXCELファイルに対して読み書きが必要になったら、是非この記事をご活用下さい。