web-dev-qa-db-ja.com

追加pandasデータフレームをGoogleスプレッドシートに追加

ケース:私のスクリプトは、データの新しい行として既存の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)

複数の単一行ではなく、データフレーム全体を追加する方法はありますか?

10
BALAJI

お勧めできます 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)
12
thorbjornwolf

googleスプレッドシートが.csv形式の場合、pandasデータフレームをdf.to_csv()を使用してcsvに変換し、その形式で保存できます。

0
Anshul Sinha

私は次の解決策を思いつきました。現在のデータは上書きされませんが、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を使用しました。

0
Dark Templar