Excelファイルの操作はPythonからでも容易に出来ます。Excelに纏わる作業はVBAで行う人が多いかと思いますが、Pythonでも簡単にExcel操作を自動化出来てしまいます。データ処理をPythonで行っている人は、Excel操作もPythonで行っちゃいましょう。
PythonでExcelファイルを作成する方法は幾つかありますが、今回は、pandasを使用した方法を紹介します。
Pandasを使用してエクセルファイルを作成する場合、 ①1個のシートを作成しデータだけ書き込む場合と、②複数シートを作成する、または、チャート(グラフ)等描画する場合、で書き方が若干異なります。
1個のシートにデータだけ書き込む場合
Pandas.DataFrame.to_excelを使用します。使用方法は下記の通りです。
使い方
Pandas.DataFrame.to_excel(filename, sheet_name="Sheet1", header=True, index=True, startrow=0, startcol=0, engine=None)
- filename : string
- ファイル名を指定。
- sheet_name : string
- シート名を指定。デフォルト値は”Sheet1″。
- header : boolean
- デフォルト値はTrue。Trueの場合DataFrameのカラム名がそのまま利用される
- index : boolean
- デフォルト値はTrue。Trueの場合データに加え、DataFrameのインデックスが書き込まれる(データ列に加え、インデックス列が出来る)
- startrow : integer
- 書き込み開始行を指定。デフォルト値は0。startrow = 1 とた場合、書き込み開始行は2行目からになる
- startcol : integer
- 書き込み開始列を指定。デフォルト値は0。startcol= 1とした場合、書き込み開始列はB列となる。
- engine : string
- 書き込みエンジンを指定。デフォルト値はNone。Noneの場合、xlsファイルを作成する際にはxlwtが使用され 、xlsxファイルを作成する時はopenpyxlが使用される(詳細はここを参照。xlsxファイルを作成する時は、’xlsxwriter’も指定可能。
指定できるパラメータは上記以外にもあります。詳細はpandasのドキュメントを参照してください。
ソースコード例
import pandas as pd
import numpy as np
#データ作成
X = np.arange(0, 100, 5)
Y = X**2
#データフレーム作成
data = pd.DataFrame({"X": X, "Y": Y})
#例1: engine=None(即ちopenpyxlを使用)
filename = "~/test1.xlsx"
#ファイル名は絶対パスで記述
filename = os.path.expanduser(filename)
data.to_excel(filename, sheet_name = "test01", startrow=1, startcol=1)
#例2: engine=xlsxwriter
#書き込みエンジンにxlsxwriterを使用
filename = "~/test1-1.xlsx)
#ファイル名は絶対パスで記述
filename = os.path.expanduser(filename)
data.to_excel(filename, sheet_name = "test01", startrow=0, startcol=0, engine="xlsxwriter", index=False)
#例3: engine=xlwt
#書き込みエンジンにxlwtを使用。拡張子は.xlsにしないとエラーになる。
filename = "~/test1-2.xls)
#ファイル名は絶対パスで記述
filename = os.path.expanduser(filename)
data.to_excel(filename, sheet_name = "test01", startrow=0, startcol=1, engine="xlwt, index=False)
複数シートを扱う場合、チャートや図を作成する場合
pandas.ExcelWriterとpandas.DataFrame.to_excelを使用します
使い方
1. まずExcelWriterオブジェクトを作成します。
writer = pandas.ExcelWriter(filename, engine=None)
- filename : string
- ファイル名
- engine :string
- pandas.DataFrame.to_excelで述べた内容と同じ
2. 次にpandas.DataFrame.to_excelを使用します。使用方法は殆ど先程と同じです。
writerにwriterオブジェクトをセットする点が先程と異なります。
engineはここで指定しても構いませんが、異なるエンジンを設定するとエラーになります。
Pandas.DataFrame.to_excel(writer, sheet_name="Sheet1", header=True, index=True, startrow=0, startcol=0, engine=None)
- writer : writerオブジェクト(pandas.ExcelWriter)
- その他はpandas.DataFrame.to_excelと同じ
3. Writerを閉じます
writer.close()
1と3は下記のように書いてもOKです。
with pd.ExcelWriter(...) as writer:
ソースコード例
import pandas as pd
import numpy as np
X = np.arange(0, 100, 5)
Y = X*2
#ファイル名は絶対パスで記述
filename = "~/test1-3.xlsx"
filename = os.path.expanduser(filename)
#writerオブジェクトの作成
writer = pd.ExcelWriter(filename, engine="xlsxwriter")
#データフレーム作成
data1 = pd.DataFrame({"X1": X, "Y1": Y})
data2 = pd.DataFrame({"X2" : X * 2, "Y2": Y * 2})
#sheet01に書き込み
data1.to_excel(writer, sheet_name="sheet01", header=True, index=False, startrow=0, startcol=0)
#sheet02に書き込み
data2.to_excel(writer, sheet_name="sheet02", header=True, index=True, startrow=0, startcol=0)
writer.close()
'''
以下のように書いてもよい
with pd.ExcelWriter(filename, engine="xlsxwriter") as writer:
data1.to_excel(writer, sheet_name="sheet01", header=True, index=False, startrow=0, startcol=0)
data2.to_excel(writer, sheet_name="sheet02", header=True, index=True, startrow=0, startcol=0)
'''