見出し画像

[Python] Googleスプレッドシートのデータを読み込み、pandasのDataFrame型として取り込む

はじめに

Pythonスクリプトにて、Googleスプレッドシートから読み込んだデータを、pandasのDataFrameに取り込む実装について、まとめます。

使用しているデータは、下記のサイトを使用してダミーデータを作成し、Googleスプレッドシートに展開しました。

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メソッドに切り替えました。

戻り値を表示して確認してみます。

get_all_valuesメソッドの戻り値の2次元リスト

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を表示して、確認してみます。

DataFrame

Googleスプレッドシートのシートのデータが、DataFrameに読み込まれました!

まとめ

今回は、Pythonスクリプトにて、Googleスプレッドシートシートから読み込んだデータを、pandasのDataFrameに取り込む実装についてまとめました。Googleスプレッドシートが、pandasのDataFrameに変換できると、データの抽出や解析が楽になります。

参考サイト


この記事が気に入ったらサポートをしてみませんか?