pandas.DataFrame.to_excel()
pandas.DataFrame.to_excel() を使うと、データフレームを Excelファイルに書き出すことができます。引数で指定したファイル名がすでに存在している場合はファイルを上書きし、存在しない場合は新規ファイルを作成します。Excel ファイルから読み込んだデータをデータフレームに格納する関数については以下の記事を参照してください。
≫ [pandas] Excelファイルの読み込み
最初に国別の人口と面積を格納したデータフレーム df1 を作成しておきます (出典:Wikipedia)。
# PANDAS_WRITE_EXCEL # In[1] import numpy as np import pandas as pd # 行ラベル r = ["中国", "インド", "アメリカ合衆国"] # 列ラベル c = ["人口", "面積"] # データ arr = np.array([[1345750000, 9596961], [1198003000, 3287263], [314658000, 9629091]]) # データフレームを作成 df1 = pd.DataFrame(arr, index = r, columns=c)
pop_area_c.xlsx という名前で Excelファイルを新規作成して、データフレーム df1 を保存してみます。
# In[2] df1.to_excel("pop_area_c.xlsx")
pop_area_c.xlsx を開いて中身を確認しておきます。
startrow, startcol
デフォルト設定で書き込むと表はシートの左上隅にくっついていますが、startrow, startcol で表の位置を指定することができます。表の上に 3 行、左に 1 列の空白セルを挿入してみます (pop_area_c.xlsx に上書きします)。
# In[3] df1.to_excel("pop_area_c.xlsx", startrow=3, startcol=1)
sheet_name
sheet_name でシート名を設定できます(デフォルトのシート名は “sheet1″)。
# In[4] df1.to_excel("pop_area_c.xlsx", sheet_name="pop1-3")
pandas.ExcelWriter
新しいデータフレーム df2 と df3 を作成しておきます。
# In[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 オブジェクトを使うと、複数シートにデータフレームを同時に書き出すことができます。
# In[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 はバックグラウンドで xlrd や openpyxl, xlsxwriter などのモジュールを使用しています。pandas.ExcelWriter() の engine に openpyxl を渡し、追記モード (mode=”a”) を指定すると、既存のブックに新しいシートを追加してデータを書き込むことができます。
# In[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")
コメント
下記は誤植と思われますので、ご確認ください。
WRITE_EXCEL-1 プログラムで下記の 2 行を追加。
import numpy as np
import pandas as pd
WRITE_EXCEL-1 プログラムの下の文で、df → df1
直しておきました。
ありがとうございます。m(_ _)m