Pythonでスプレッドシートの書き込みはできるようになったけれど、スプレッドシートにあるデータを加工する方法を知らなかったので調べてみました。
Contents
その前に 認証
PythonでGoogle スプレッドシートを使うためにはGoogleの設定をおこなわなければなりません。設定がまだの場合は以下を参考に設定してみてください。
スプレッドシートの値を取得する書き方まとめ
セルを1つだけ取得する場合や全て取得する場合、公式を取得などまとめました。
指定した1つのセルの値を取得
例えばA2のセルの値を取得する場合は以下の書き方になります。
worksheet.acell('A2').value
A2だとプログラミング時に扱いづらい場合などは数値で場所を指定することもできます。
worksheet.cell(2, 1).value
cell(row, column)の構文で、左に行番号、右に列番号を書いて対象のセルを取得します。
公式を取得する
=1+1などの式を取得する場合は以下のように書きます。
worksheet.acell('A1', value_render_option='FORMULA').value
範囲を指定して値を取得
A1からC4の間のセル全ての値を取得します。
worksheet.get('A1:C4')
N行を指定して値を取得(戻り値:リスト)
2行目の値を全て取得する場合の書き方は以下になります。
worksheet.row_values(2)
N列を指定して値を取得(戻り値:リスト)
1列目の値を全て取得する場合の書き方は以下になります。
worksheet.col_values(1)
値を全て取得(戻り値:リスト)
問答無用で開いているシートの値を全て取得しリスト型で返してくれます。
worksheet.get_all_values()
値を全て取得(戻り値:辞書型)
問答無用で開いているシートの値を全て取得し辞書型で返してくれます。
worksheet.get_all_records()
値を全て取得(戻り値:DF)
開いているシートの値を全てPandasのデータフレーム型で返してくれます。
pd.DataFrame(worksheet.get_all_records())
サンプルコード
サンプルコードを作りました。Colabで動かす場合は上記の準備の記事を元にドライブをマウントして実行してください。
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
#ダウンロードしたjsonファイルをドライブにアップデートした際のパス
json = 'ここにjsonのパス'
credentials = ServiceAccountCredentials.from_json_keyfile_name(json, scope)
gc = gspread.authorize(credentials)
#書き込み先のスプレッドシートキーを追加
SPREADSHEET_KEY = 'ここにスプレッドシートのキー'
#共有設定したスプレッドシートの1枚目のシートを開く
worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1
# 指定した1つのセルA2を取得
cellData = worksheet.acell('A2').value
# 指定した1つのセルを行と列を指定して取得
cellDataNum = worksheet.cell(2, 1).value # cell(row, column)
# 公式を取得する
cellFormula = worksheet.acell('A1', value_render_option='FORMULA').value
# 範囲で取得 A1からC4を取得
rangeDataCell = worksheet.get('A1:C4')
# N行の値を全て取得(戻り値:リスト)
row_list = worksheet.row_values(2)
# N列の値を全て取得(戻り値:リスト)
col_list = worksheet.col_values(1)
# 値を全て取得(戻り値:リスト)
list_of_lists = worksheet.get_all_values()
# 値を全て取得(戻り値:辞書型)
list_of_dicts = worksheet.get_all_records()
import pandas as pd
# 値を全て取得(戻り値:DF)
dataframe = pd.DataFrame(worksheet.get_all_records())
おわり
データフレーム型にヘッダーをつけたかったけれど、力尽きました。
参考
https://docs.gspread.org/en/latest/user-guide.html