PythonのPandasモジュールで作成した表をエクセルファイルに出力する方法についてまとめています。
to_excelメソッドを使って、DataFrame型の表をexcelファイルとして出力します。ヘッダーやインデックスなどデフォルトで追加されている余計な行列を非表示にしたり、小数点の桁数を指定したり、空白セルを指定した文字列で埋める方法などについてです。
ライブラリのインストール
まずはpythonでexcelファイルを読み込んだり、書き込みを行うために必要なライブラリをインストールします。
pip install -U openpyxl
pip install -U xlwt
pip install -U pandas
①openpyxl:xlsx / xlsm / xltx / xltmファイルを読み書きするためのPythonライブラリ
②xlwt:古いExcelファイル(.xlsなど)にデータとフォーマット情報を書き込むためのライブラリ(Excel2003以前)
③pythonでデータ分析を行うためのライブラリ。表データの扱いで使用。
書き込む表データ(実例用)
エクセルへの出力方法を実例で解説する際に、Pandasで作成した次のような表を使用します。
上記の表は以下のコマンドで作成できます。
import pandas as pd
import numpy as np
row0 = [0, 1, 2, 3, 4]
row1 = [1, 10, 20, 30, 40]
row2 = [10, 100, 200, 300, 400]
row3 = [np.nan, np.nan, 'aaa', np.nan, np.nan]
row4 = [0.1, 0.12, 0.123, np.nan, 0.12345]
df = pd.DataFrame([row0,row1,row2,row3, row4])
df.columns = ['col0', 'col1', 'col2' ,'col3', 'col4']
df.index = ['row0', 'row1', 'row2', 'row3', 'row4']
df
ファイル名を指定して出力
作成した表を、to_excelメソッドを使って、ファイル名を指定してエクセルファイルとして出力します。
df.to_excel('ファイルパス')
└「df」:出力する表データ
└「ファイルパス」:ファイル名も記載
実例
デスクトプに「output.xlsx」という名前で出力する場合は次のようになります。
import pandas as pd
df.to_excel('~/desktop/output.xlsx')
シート名を指定しない場合、シート名は「sheet1」になります。
▼出力結果
シート名を指定して出力
エクセルファイルに出力するときに、「sheet_name」オプションを使うことでシート名を指定することもできます。
df.to_excel('ファイルパス', sheet_name='A')
└ 「A」:シート名
実例
シート名「AAA」で出力するプログラムは以下のようになります。
import pandas as pd
df.to_excel('~/desktop/output.xlsx', sheet_name='AAA')
▼出力結果
ヘッダーを表示しない
デフォルトではエクセルファイルに変換したときに、col0, col1といったようにヘッダー(カラム名)の行が追加されます。
オプションにheader=False
を記載することで、ヘッダーを無しにすることができます。(または「header=None」でも可能です)
実例
import pandas as pd
df.to_excel('~/desktop/output.xlsx', header=False)
インデックス(行名)を表示しない
デフォルトではエクセルファイルに変換したときに、A列にrow0, row1といったようにインデックス(行名)の列が追加されます。
オプションにindex=False
を記載することで、インデックスの列を無しにすることができます。(または「index=None」でも可能です)
実例
import pandas as pd
df.to_excel('~/desktop/output.xlsx', index=None)
ヘッダーとインデックスを表示しない
オプションにindex=False
とheader=False
を記載することで、ヘッダーとインデックスの両方ともを表示しない状態でエクセルファイルに出力することもできます。
実例
import pandas as pd
df.to_excel('~/desktop/output.xlsx', index=False, header=False)
上部に空白行を入れる
上部に指定した数だけ、空白行を入れることもできます。
オプションにstartrow=n
を記述。
└「n」:空ける行数
実例
▼n=3の場合
import pandas as pd
df.to_excel('~/desktop/output.xlsx', startrow=3)
左側に空白列を入れる
左側に指定した数だけ空白列を追加することもできます。
オプションにstartcol=n
を記述。
└「n」:空ける列数
実例
▼n=2の場合
import pandas as pd
df.to_excel('~/desktop/output.xlsx', startcol=2)
小数点の最大表示桁数を指定
小数点の最大表示桁数を指定することもできます。
オプションにfloat_format='%.nf'
を記述。
└「n」:表示する桁数
import pandas as pd
df.to_excel('~/desktop/output.xlsx', float_format='%.2f')
n=2なら、3桁目を四捨五入し、小数点第2桁まで表示。
NaNを任意の値で埋める
NaNとなっている空白のセルを、指定した任意の値で埋めることもできます。
オプションにna_rep='A'
を記述。
└「A」:NaNセルを埋める値
import pandas as pd
df.to_excel('~/desktop/output.xlsx', na_rep='XXXX')
ExcelWriterでできること&注意点
ExcelWriter関数とto_excelをあわせて使うと、シート2枚以上のエクセルファイルを出力したり、既存ファイルにシートを追加することができます。
▼できること
・シートを2枚以上作成する
・既存ファイルにシートを追加する
・日付の書式を設定できる
▼注意点
・ファイルパスにホームディレクトリを指す「~」は使えない。
・パスをバックスラッシュ「/」で指定する場合は、「//」とする。(¥¥)
└ 「/」はエスケープのため。
・ExcelWriterで開いたファイルは閉じる必要がある。
└ with構文を使う
シートを2枚以上作成する
シートを2枚以上作成する場合はExcelWriterを使います。
with pd.ExcelWriter('出力先パス.xlsx') as writer:
表オブジェクト.to_excel(writer, sheet_name='シート名')
表オブジェクト2.to_excel(writer, sheet_name='シート名2')
・
・
・
▼2つの表、df1とdf2を一つのエクセルファイルに出力する場合
with pd.ExcelWriter('test.xlsx') as writer:
df1.to_excel(writer, sheet_name='sheet1')
df2.to_excel(writer, sheet_name='sheet2')
実行中の環境と同じディレクトリにtext.xlsxファイルを作成。
既存ファイルに新しいシートを追加する
with pd.ExcelWriter(''出力先パス.xlsx', mode='a') as writer:
追加する表オブジェクト.to_excel(writer, sheet_name='シート名')
・mode='a'
:ファイル追加
▼既存ファイル(test.xlsx)にシート「sheet3」を追加する。
with pd.ExcelWriter('test.xlsx', mode='a') as writer:
df3.to_excel(writer, sheet_name='Sheet3')