gspread-dataframeライブラリについて日本語の文献が少ないと感じたのでまとめる。
やりたいこと
Pythonでgoogleスプレッドシートを操作したい。一度スプレッドシートのデータをpandasのDataframeに入れてから、編集して、それを元のスプレッドシートに反映させたい!イメージは以下
やってみた
まずは、読み書きの初期設定。画像付きでわかりやすいサイトがあった。スプレットシートやPythonの初期設定は難なく終った。
そして実際にコピーして、編集して、スプレッドシートに反映させる作業を行った。
とても丁寧なサイトがあり、参考にしてやってみた。スプレッドシートからコピーする作業はそこまで大変ではなさそう。
しかし、再び元のスプレッドシートをコピーする場合、cell_list
に全てのセルについて保存してから反映させる。この作業がちょっと複雑そう。
マジギレパンダス
そこでgspread-dataframeライブラリ
うまいことやってくれるライブラリがないか探したところ、gspread-dataframeがあった。インストールは簡単。
pip3 install gspread-dataframe
例えば、このようなスプレッドシートがあったとする。
gspread-dataframeを使って以下のようにした。
import pandas as pd
import gspread
from gspread_dataframe import get_as_dataframe, set_with_dataframe
worksheet = [適宜シートを設定]
# sheetからdataframeで受け取る
df_sps = get_as_dataframe(worksheet, usecols=[0,1,2,3], skiprows=0, header=0, index_col=0)
#################
# ここでデータ処理
#################
# sheetに反映
set_with_dataframe(worksheet, df_sps.reset_index())
-
get_as_dataframe
:指定したシートからデータを取ってきてDataframeにしてくれる。オプションはpandas.read_csv
で利用できるものなら使えそう。 参考:https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html -
set_with_dataframe
:指定したシートにデータを反映させる。
(補足) この例だと、get_as_dataframe
したときに、1列目をindexとして指定している。indexを設定したままset_with_dataframe
をするとindexの列が消えてしまうため、df_sps.reset_index()
で渡した。
気になる点
- スプレッドシートに書き込む際に必要なGoogleAPIは「100秒間に100回しかAPIを叩けない」という制約があるが、更新の際は何回APIを叩いていることになるのか。
- データ数が多いときどうなるか
感想
簡単にpandas.Dataframeをスプレッドシートに反映できた。コードがかなりシンプルになるので今後活用していきたい。