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?
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)
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
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.