
[Python] Googleスプレッドシートのデータをpandas DataFrameで読み込み、書き込みを行う
はじめに
Pythonスクリプトを使用して、GoogleスプレッドシートのデータをPandasのDataFrameに読み込み、またDataFrameのデータをシートに書き込む方法について説明します。
使用するサンプルデータは、mockarooを使用して作成したダミーデータを、Googleスプレッドシートの「シート1」に展開したものを使用します。

動作環境
windows11
Jupyter Notebook 6.4.5
Python 3.9.7
手順
1.事前準備
Google Cloud Platformの設定が必要です。設定方法を下記をご参照ください。
2.ライブラリをインストールする
今回は、下記のライブラリを使用します。まだインストールされていない場合は、インストールを行ってください。
pandas
google-auth-httplib2
gspread
gspread-dataframe
3.Pythonスクリプトを実装する
gspread-dataframeライブラリで、読み込み、書き込み用のメソッドが準備されていますので、下記のスクリプトで試してみます。
GoogleスプレッドシートからDataFrameとして読み込む
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import pandas as pd
from gspread_dataframe import get_as_dataframe, set_with_dataframe
SS_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
scopes = [
'https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive'
]
credentials = ServiceAccountCredentials.from_json_keyfile_name(
'./service_account.json',
scopes=scopes
)
gc = gspread.authorize(credentials)
workbook = gc.open_by_key(SS_ID)
worksheet = workbook.sheet1
df_read = get_as_dataframe(worksheet)
display(df_read)
順番に処理の内容を説明します。
データの読み込みを行うメソッドは、get_as_dataframeメソッドを使用します。このメソッドに、引数として読み込むシートのworksheetオブジェクトを渡します。
df_read = get_as_dataframe(worksheet)
それでは、読み込んだデータを表示してDataFrameオブジェクトに取り込んだデータを確認してみましょう。

シート内に存在するすべてのセルをDataFrameオブジェクトに取り込んでしまうようです。残念…
有効なデータのみDataFrameに取り込みたい場合は、以前ご紹介した方法で対応したほうがよさそうです。
詳細は、下記の記事ご参照ください。
GoogleスプレッドシートにDataFrameを書き出す
先ほど読み込んだDataFrameに1行のデータを追加して、別のシートに書き込みをしてみます。
まず、追加する1行のDataFrameオブジェクトを作成します。
df_append = pd.DataFrame([[21, 'Toyota', 'Acua', 2021]], columns=list(df_read.columns))
次に、先ほどGoogleスプレッドシートから読み込んだDataFrameオブジェクトに、追加する1行分のDataFrameオブジェクトを結合します。
df_write = pd.concat([df_read, df_append], ignore_index=True, axis=0)
シートを新規作成して、作成したシートに書き込みを行います。
worksheet = workbook.add_worksheet(title='シート2' ,rows=df_write.shape[1], cols=df_write.shape[0])
set_with_dataframe(worksheet, df_write, row=1, col=1)
1行目で、gspreadライブラリのadd_worksheetメソッドで、シートを新規作成します。
引数として、title=でシート名、rows=で作成するシートの行数、cols=で作成するシートの列数を指定します。
今回は、DataFrameの行数とカラム数をそれぞれ指定しました。
2行目で、gspread-dataframeライブラリのset_with_dataframeメソッドで、1行目で作成したシートにDataFrameオブジェクトを書き込みします。
引数として、第1引数でDataFrameオブジェクトを設定したいシートのworksheetオブジェクト、第2引数では書き込みを行うDataFrameオブジェクト、row=で書き込み開始行番号、col=で書き込み開始列番号を指定します。
なお、row、colはデフォルトで1が指定されているため、A1セルから書き込みを行いたい場合は、キーワード引数を使って指定しなくてもOKです。
それでは、書き込みができたか確認してみます。

書き込みできました!
まとめ
今回は、Pythonスクリプトを使用して、GoogleスプレッドシートからPandasのDataFrameにデータを読み込み、DataFrameのデータをシートに書き込む方法についてまとめました。