[Python] Googleスプレッドシートのデータを読み込み、pandasのDataFrame型として取り込む
はじめに
Pythonスクリプトにて、Googleスプレッドシートから読み込んだデータを、pandasのDataFrameに取り込む実装について、まとめます。
使用しているデータは、下記のサイトを使用してダミーデータを作成し、Googleスプレッドシートに展開しました。
動作環境
windows11
Jupyter Notebook 6.4.5
Python 3.9.7
手順
1.事前準備
事前準備として、Google Cloud Platformの設定と、使用するGoogleスプレッドシートの設定が必要です。方法を下記にまとめましたので、ご参照ください。
2.ライブラリをインストールする
今回は、下記のライブラリを使用します。
gspread
google-auth-httplib2
pandas
インストールしていない場合、インストールを行います。
3.Pythonスクリプトを実装する
全体の処理は、下記です。
import pandas as pd
import gspread
from oauth2client.service_account import ServiceAccountCredentials
SS_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
SHEET_NAME = 'yyyyyy'
scopes = [
'https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive'
]
# Credentials 情報を取得
credentials = ServiceAccountCredentials.from_json_keyfile_name(r'.\\service_account.json', scopes)
#OAuth2のクレデンシャルを使用してGoogleAPIにログイン
gc = gspread.authorize(credentials)
# IDを指定して、Googleスプレッドシートのワークブックを選択する
workbook = gc.open_by_key(SS_ID)
# シート名を指定して、ワークシートを選択
worksheet = workbook.worksheet(SHEET_NAME)
# スプレッドシートをDataFrameに取り込む
df = pd.DataFrame(worksheet.get_values()[1:], columns=worksheet.get_values()[0])
順番に処理の内容を説明します。
①OAuthの認証
scopes = [
'https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive'
]
# Credentials 情報を取得
credentials = ServiceAccountCredentials.from_json_keyfile_name(json_f_path, scopes)
APIで使用する権限を指定します。今回は、Googleスプレッドシートの権限と、Gogoleドライブ上のファイル操作の権限を指定しています。
ServiceAccountCredentials.from_json_keyfile_nameメソッドの第1引数には、Google Cloud Platformで作成した秘密鍵情報が格納されている、JSONファイルのファイルパスを指定します。
②GoogleAPIにログイン
#OAuth2のクレデンシャルを使用してGoogleAPIにログイン
gc = gspread.authorize(credentials)
OAuth2のクレデンシャルを使用してGoogleAPIにログインし、認証を行います。戻り値には、生成されたgspreadインスタンスが返されます。
③Googleスプレッドシートからシートを選択
# IDを指定して、Googleスプレッドシートのワークブックを選択する
workbook = gc.open_by_key(SS_ID)
# シート名を指定して、ワークシートを選択
worksheet = workbook.worksheet(SHEET_NAME)
gspreadライブラリには、Googleスプレッドシートを選択する方法として、下記3つのメソッドが準備されています。
open
open_by_key
open_by_url
今回は、スプレッドシートキーを指定してワークブックを選択する、open_by_keyメソッドを使用します。引数には、スプレッドシートのキー(id)を指定します。
次に、ワークブックからワークシートを指定します。worksheetメソッドを使用し、引数にはシート名を指定します。
④Googleスプレッドシートからシート内のすべての値を取得する
worksheet.get_values()
Googleスプレッドシートの指定された範囲のデータを取得するメソッドとして、get_valuesメソッドがあります。
シート内すべての値を取得する場合は、引数無しで取得することができます。
戻り値は、すべてのセルのデータを含むリストとして返されます。
※以前は、get_all_valuesメソッドを使用していましたが、公式ドキュメントに、従来の方法と記載がありましたので、get_valuesメソッドに切り替えました。
戻り値を表示して確認してみます。
2次元リストの1行目に見出し、2行目以降にはデータが格納されていることが確認できます。
⑤Googleスプレッドシートから取得した2次元リストを、DataFrameに設定する
# スプレッドシートをDataFrameに取り込む
df = pd.DataFrame(worksheet.get_all_values()[1:], columns=worksheet.get_all_values()[0])
pandasのDataFrame生成時に、第1引数としてDataFrameに設定する元データを設定を行います。今回は、Googleスプレッドシートから取得した2次元リストの2行目以降を指定しています。
次に、columnsオプションには、2次元リストの1行目に設定されている見出し行をリストで指定しています。
生成したDataFrameを表示して、確認してみます。
Googleスプレッドシートのシートのデータが、DataFrameに読み込まれました!
まとめ
今回は、Pythonスクリプトにて、Googleスプレッドシートシートから読み込んだデータを、pandasのDataFrameに取り込む実装についてまとめました。Googleスプレッドシートが、pandasのDataFrameに変換できると、データの抽出や解析が楽になります。
参考サイト
この記事が気に入ったらサポートをしてみませんか?