【Python】Pandasでエクセルファイル(.xlsx)をDBの様に使うサンプルコード
Pythonで表データの読み出し書き出し
PythonではPandasを使うことで簡単に表計算を行うことができますが、データをファイルとして保存する場合には一工夫が必要です。
そこで今回はPandasの表データをエクセルファイル(.xlsx)に保存/読み込みするサンプルコードをご紹介したいと思います。
エクセルファイル(.xlsx)に表データを入れるメリット・デメリット
メリット
メリットはデータを簡単に見れることです。複製や編集などの扱いも簡単です。
デメリット
デメリットとしてはファイルの容量が大きくなると読み出しに時間が掛かる様になることです。
このエクセルファイルを一時データの保存先に使う方法は大きなデータには向きません。
準備
pip
pip install pandas
pip install xlsxwriter
基本
import pandas as pd import xlsxwriter # 表に入れる内容 item=[["apple","100"],["orange","150"],["banana","50"],["apple","200"]] # データフレームの作成 df = pd.DataFrame(item, columns=["item","price"]) display(df)
書き出し/読み込み
import pandas as pd import xlsxwriter # 表に入れる内容 item=[["apple","100"],["orange","150"],["banana","50"],["apple","200"]] # データフレームの作成 df = pd.DataFrame(item, columns=["item","price"]) # データフレームの表示 display(df) # ファイルへ書き出し df.to_excel('item.xlsx') # ファイルから読み込み df = pd.read_excel("item.xlsx", index_col=0)
説明
df.to_excel('item.xlsx')
エクセルファイルに書き出しが出来る。書き出し先に同名ファイルが存在しない場合は新規作成され、既に存在する場合は上書き更新されます。
df = pd.read_excel("item.xlsx", index_col=0)
上記のコードで一シート目の表をデータフレームとして読み込む事ができる。
なお文字のエンコーディング関係でエラーが出る場合や複数シートを利用したい場合などはxlsxwriterを通して保存すると良いです。
xlsxwriterを使う場合の例
# xlsxwriterを通して書き込み writer = pd.ExcelWriter("item.xlsx",options={"strings_to_urls": False}, engine="xlsxwriter") df.to_excel(writer, sheet_name="Sheet1") writer.close()
DBっぽく使う方法
データフレームをリストに変換する
import pandas as pd import xlsxwriter # ファイルから読み込み df = pd.read_excel("item.xlsx", index_col=0) # データフレームをリストに変換する item_list=df.values.tolist() display(item_list)
[['apple', 100], ['orange', 150], ['banana', 50], ['apple', 200]]
指定列をリストとして取得する
import pandas as pd import xlsxwriter # ファイルから読み込み df = pd.read_excel("item.xlsx", index_col=0) # 指定列をリストとして取得する item_name = df["item"].values.tolist() display(item_name) item_price = df["price"].values.tolist() display(item_price)
指定行を行番号指定でリストとして取得する
item_list = df[0:3].values.tolist() display(item_list)
[['apple', 100], ['orange', 150], ['banana', 50]]
df[0:3]の部分で0~3行目までを範囲指定しています。
データフレームの集計
# appleを抽出したデータフレームを作成 df2 = df[df["item"]=="apple"] # データ数 price_cnt = df2["price"].count() display(price_cnt) # 合計 price_sum = df2["price"].sum() display(price_sum) # 平均 price_mean = df2["price"].mean() display(price_mean)
なお単純に統計量を知りたい場合はdescribe()を使うと簡単です。
df2 = df[df["item"]=="apple"] df2.describe()