[筆記] 使用 pygsheets 記錄實驗數據到 google sheet

 設定 Google Drive API

  1. 去 google cloud console 上建一個專案
    https://console.cloud.google.com/

  2. 接著在專案裡面搜尋 Google Drive API

  3. 接著啟用它

  4. 去憑證 (Credentials) 點選"+建立憑證" 然後,選擇 “服務帳戶”

  5. 設定完服務帳戶 ID 後可以在下方看到一組服務帳戶ID為首的email帳號

    • 去 google sheet 表單中,將該帳號加入共用名單當中
  6. 接著去服務帳戶的頁面裡面點選"金鑰>新增金鑰>選 json 格式"就會下載一個金鑰 json 檔案

  7. 記得還要啟用 google sheet api

安裝與使套件 pysheets

安裝 pysheets
https://github.com/nithinmurali/pygsheets

pip install pysheets

使用 pysheets 把資料寫入 google sheet

import pygsheets
import pandas as pd
#authorization
gc = pygsheets.authorize(service_file='{這裡放金鑰json的檔案路徑}')

# Create empty dataframe
df = pd.DataFrame()

# Create a column
df['name'] = ['tao1', 'tao2', 'tao3', "tao4"]
df['age'] = [11, 12, 13, 14]

#open the google spreadsheet 
sh = gc.open('{這裡寫你的google sheet的名稱}')

#select the first worksheet 
wks = sh[0]  

#update the first worksheet with df, starting at cell A1 i.e.(0,0) 
wks.set_dataframe(df,(0,0))

表單的基本操作

細節可以查 document
https://pygsheets.readthedocs.io/en/stable/worksheet.html

我紀錄一下我常用的

update sheet 標單中 A1 那一格的值成 XDD

wks.update_value('A1', 'XDD') 

update 整個 row

wks.update_row(4, ['tao3', 18]) 

取得表單範圍內的值,例如從 ‘A1’ ~ ‘B4’

start = 'A1'
end = 'B4'
res = wks.get_values(start, end)
print(type(res))
res

可以看到 output 長這樣

<class 'list'>
[['XDD', 'age'], ['tao1', '11'], ['tao2', '12'], ['tao3', '18']]

在表單裡面新增一個新的 TAB (worksheet)

再複習一次基本的設定與連線到表單 (sheet)

import pygsheets
import pandas as pd

#authorization
gc = pygsheets.authorize(service_file='{這裡放金鑰json的檔案路徑}')

#open the google spreadsheet 
sh = gc.open('{這裡寫你的google sheet的名稱}')

建立新的 TAB

例如建立一個 200 row 的表單,Tab 名稱為 nba_2023

N = 200
sheet_name = "nba_2023"
sh.add_worksheet(sheet_name, rows=N)

把新的資料 (dataframe) 存進去

使用 property=“title” 以及 value=“nba” 去找到剛剛建立的 sheet

datas = [["Irving", "Dallas Maverick", "PG"],
         ["Westbrook", "La Clippers", "PG"],
         ["Durant", "Phoenix Suns", "SF"],
         ["Curry", "Golden State Warriors", "PG"],
         ["Harden", "Philadelphia 76ers", "SG"],
         ["Jokić", "Denver Nuggets", "C"]]
df_new = pd.DataFrame(columns=['name', 'team', 'position'], data=datas)

ws = sh.worksheet(property="title", value="nba_2023")
ws.set_dataframe(df_new, (0,0))

目前結果

追加新的資料 rows append 到表單的後面

values = [["Dončić", "Dallas Maverick", "SG"],
          ["Davis", "LA Lakers", "PF"],
          ["Tatum", "Boston Celtics", "SF"]]
ws = sh.worksheet(property="title", value="nba_2023")
ws.append_table(values=values)

結果

再執行一次就會看到這樣

補充說明: 剛剛我們建立表單時設定 rows=200
當我執行完 append_table 兩次後,共新增了 6 筆資料,
此時表單的大小也會跟著長大,變成 200 + 6 = 206

報告完畢!


留言

這個網誌中的熱門文章

[筆記] CRLF跟LF之區別 --- 隱形的 bug

[ML筆記] Batch Normalization

[筆記] 統計實習(1) SAS 基礎用法 (匯入資料並另存SAS新檔,SUBSTR,計算總和與平均,BMI)

[ML筆記] Ensemble - Bagging, Boosting & Stacking