見出し画像

[Python] Googleスプレッドシートのデータをpandas DataFrameで読み込み、書き込みを行う

はじめに

Pythonスクリプトを使用して、GoogleスプレッドシートのデータをPandasのDataFrameに読み込み、またDataFrameのデータをシートに書き込む方法について説明します。

使用するサンプルデータは、mockarooを使用して作成したダミーデータを、Googleスプレッドシートの「シート1」に展開したものを使用します。

Googleスプレッドシート上に展開されたデータ


動作環境

  • 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オブジェクトに取り込んだデータを確認してみましょう。

get_as_dataframeメソッドを使用して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です。

それでは、書き込みができたか確認してみます。

set_with_dataframeメソッドを使ってDataFrameオブジェクトを書き込み

書き込みできました!

まとめ

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

参考サイト

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