Here is the code to write, append(without loading the existing sheet into memory), and read to google sheets.
import gspread_dataframe as gd
import gspread as gs
gc = gs.service_account(filename="your/cred/file.json")
def export_to_sheets(worksheet_name,df,mode='r'):
ws = gc.open("SHEET_NAME").worksheet("worksheet_name")
if(mode=='w'):
ws.clear()
gd.set_with_dataframe(worksheet=ws,dataframe=df,include_index=False,include_column_header=True,resize=True)
return True
elif(mode=='a'):
ws.add_rows(df.shape[0])
gd.set_with_dataframe(worksheet=ws,dataframe=df,include_index=False,include_column_header=False,row=ws.row_count+1,resize=False)
return True
else:
return gd.get_as_dataframe(worksheet=ws)
df = pd.DataFrame.from_records([{'a': i, 'b': i * 2} for i in range(100)])
export_to_sheets("SHEET_NAME",df,'a')
- Write Mode: First clear existing worksheet =>
ws.clear()
.Second using set_with_dataframe()
uploading the dataframe,
here note that resize=True
, which strictily set the row and col in worksheet to df.shape. This will help later in append method.
- Append Mode: First, add rows according to the dataframe. Second setting the parameter
resize=False
as we are adding rows and row=ws.row_count+1
anchoring its row value for append.
- Read Mode(Default): returns a dataframe