ケース:私のスクリプトは、データの新しい行として既存のGoogleスプレッドシートに追加する必要があるデータフレームを返します。今のところ、gspreadを介して複数の単一行としてデータフレームを追加しています。
私のコード:
import gspread
import pandas as pd
df = pd.DataFrame()
# After some processing a non-empty data frame has been created.
output_conn = gc.open("SheetName").worksheet("xyz")
# Here 'SheetName' is google spreadsheet and 'xyz' is sheet in the workbook
for i, row in df.iterrows():
output_conn.append_row(row)
複数の単一行ではなく、データフレーム全体を追加する方法はありますか?
お勧めできます gspread-dataframe
:
import gspread_dataframe as Gd
# Connecting with `gspread` here
ws = gc.open("SheetName").worksheet("xyz")
existing = Gd.get_as_dataframe(ws)
updated = existing.append(your_new_data)
Gd.set_with_dataframe(ws, updated)
googleスプレッドシートが.csv形式の場合、pandasデータフレームをdf.to_csv()を使用してcsvに変換し、その形式で保存できます。
私は次の解決策を思いつきました。現在のデータは上書きされませんが、pandas DataFrame df
全体を、spread_sheet
という名前のスプレッドシートのsheet
という名前のシートの最後に追加するだけです。
import gspread
from google.auth.transport.requests import AuthorizedSession
from oauth2client.service_account import ServiceAccountCredentials
def append_df_to_gs(df, spread_sheet:str, sheet_name:str):
scopes = [
'https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive',
]
credentials = ServiceAccountCredentials.from_json_keyfile_name(
path_to_credentials,
scopes=scopes
)
gsc = gspread.authorize(credentials)
sheet = gsc.open(spread_sheet)
params = {'valueInputOption': 'USER_ENTERED'}
body = {'values': df.values.tolist()}
sheet.values_append(f'{sheet_name:str}!A1:G1', params, body)
Params valueInputOption
については this を参照してください。データをGoogleスプレッドシートに追加した後、いくつかの数式を有効にする必要があるため、ここではUSER_ENTERED
を使用しました。