web-dev-qa-db-fra.com

Ajout de pandas Data Frame à la feuille de calcul Google

Cas: Mon script renvoie un bloc de données qui doit être ajouté à une feuille de calcul Google existante en tant que nouvelles lignes de données. À partir de maintenant, j'ajoute un bloc de données en plusieurs lignes simples via gspread.

Mon code:

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)

Existe-t-il un moyen d'ajouter une trame de données entière plutôt que plusieurs lignes individuelles?

10
BALAJI

Je peux recommander 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

si la feuille de calcul Google prend le format .csv, vous pouvez convertir un pandas dataframe en csv en utilisant df.to_csv () et l'enregistrer dans ce format

0
Anshul Sinha

J'ai trouvé la solution suivante. Il n'écrase pas les données actuelles, mais ajoute simplement pandas DataFrame df à la fin de la feuille avec le nom sheet dans la feuille de calcul avec le nom spread_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)

Pour les paramètres valueInputOption veuillez consulter this . J'ai utilisé USER_ENTERED ici car j'avais besoin de certaines formules pour être valide une fois que j'ajoute les données à Google Sheets.

0
Dark Templar