[pandas] Excelファイルへの書き出し

[pandas] Excelファイルへの書き出し

pandas.DataFrame.to_excel()

 pandas.DataFrame.to_excel() を使うと、データフレームを Excelファイルに書き出すことができます。引数で指定したファイル名がすでに存在している場合はファイルを上書きし、存在しない場合は新規ファイルを作成します。Excel ファイルから読み込んだデータをデータフレームに格納する関数については以下の記事を参照してください。

 最初に国別の人口と面積を格納したデータフレーム df1 を作成しておきます (出典:Wikipedia)。

#DFE-1

# 行ラベル
r = ["中国", "インド", "アメリカ合衆国"]

# 列ラベル
c = ["人口", "面積"]

# データ
arr = np.array([[1345750000, 9596961],
                [1198003000, 3287263],
                [314658000,  9629091]])

# データフレームを作成
df1 = pd.DataFrame(arr, index = r, columns = c)

 pop_area_c.xlsx という名前で Excelファイルを新規作成して、データフレーム df を保存してみます。

#DFE-2

df1.to_excel("pop_area_c.xlsx")

 pop_area_c.xlsx を開いて中身を確認しておきます。

 pandas.to_Excel 中国・インド・USAの人口と面積

startrow, startcol

 デフォルト設定で書き込むと表はシートの左上隅にくっついていますが、startrow, startcol で表の位置を指定することができます。表の上に 3 行、左に 1 列の空白セルを挿入してみます (pop_area_c.xlsx に上書きします)。

#DFE-3

df1.to_excel("pop_area_c.xlsx", startrow=3, startcol=1)

 pandas.to_Excel startrow,startcol

sheet_name

 sheet_name でシート名を設定することができます (デフォルトのシート名は "sheet1")。

#DFE-4

df1.to_excel("pop_area_c.xlsx", sheet_name="pop1-3")

 pandas.to_Excel sheet_name

pandas.ExcelWriter

 新しいデータフレーム df2 と df3 を作成しておきます。

#DFE-5

# 行ラベル
r2 = ["インドネシア", "ブラジル", "パキスタン"]

# 列ラベル
c2 = ["人口", "面積"]

# データ
arr2 = np.array([[229964000, 1904569],
                [193733000, 8514877],
                [180808000,  796095]])

# データフレームを作成
df2 = pd.DataFrame(arr2, index = r2, columns = c2)

# 行ラベル
r3 = ["バングラデシュ", "ナイジェリア", "ロシア"]

# 列ラベル
c3 = ["人口", "面積"]

# データ
arr3 = np.array([[162220000,   143998],
                [154728000,   923768],
                [140873000, 17098242]])

# データフレームを作成
df3 = pd.DataFrame(arr3, index = r3, columns = c3)

 ExcelWriter オブジェクトを使うと、複数シートにデータフレームを同時に書き出すことができます。

#DFE-6

# シート"pop1-3"にdf1,"po-4-6"にdf2を書き込む
with pd.ExcelWriter("pop_area_c.xlsx") as ew:
    df1.to_excel(ew, sheet_name="pop1-3")
    df2.to_excel(ew, sheet_name="pop4-6")

 pandas.ExcelWriter 複数シートへの同時書き込み

 pandas はバックグラウンドで xlrd や openpyxl, xlsxwriter などのモジュールを使用しています。pandas.ExcelWriter() の engine に openpyxl を渡し、追記モード (mode="a") を指定すると、既存のブックに新しいシートを追加してデータを書き込むことができます。

#DFE-7

# pop_area_c.xlsxにシートを追加してデータを書き込む
with pd.ExcelWriter("pop_area_c.xlsx",
                    engine="openpyxl", mode="a") as ew:
    df3.to_excel(ew, sheet_name="pop7-9")

 pandas.ExcelWriter 既存のファイルにシートを追加