I believe your goal is as follows.
- You have a Spreadsheet as shown in the 1st table of your question.
- You have a dataframe as shown in the 2nd table of your question.
- You want to put append the values of dataframe to the Spreadsheet by checking the header row.
- You want to achieve this using googleapis for python.
- You have already been getting and putting values to the Google Spreadsheet using Sheets API.
In this case, how about the following sample script?
Sample script 1:
In this sample script, the values of dataframe are put into the Spreadsheet using the existing header row in your Spreadsheet. The header row of the Spreadsheet is retrieved by "Method: spreadsheets.values.update".
# This sample value is from your question.
df = pd.DataFrame([["2017-08-07", 52, 52, 32], ["2017-08-08", 726, 45, 53]], columns=["date", "kfc", "burgerking", "anw"])
gsheetid = "###" # Please set your Spreadsheet ID.
sheet_name = "Sheet1" # Please set sheet name.
service = build("sheets", "v4", credentials=creds) # Please use your script here.
header = service.spreadsheets().values().get(spreadsheetId=gsheetid, range=sheet_name).execute())["values"][0]
new_list = []
dic = df.to_dict("records")
for o in dic:
temp = []
for h in header:
temp.append(o[h] if h in o else "")
new_list.append(temp)
res = service.spreadsheets().values().append(spreadsheetId=gsheetid,range=sheet_name,valueInputOption="USER_ENTERED",insertDataOption="INSERT_ROWS",body={"values": new_list}).execute()
- When this script is run to your sample Spreadsheet, the values of
new_list of [['2017-08-07', '', 52, 32, ''], ['2017-08-08', '', 726, 53, '']] are appended to the Spreadsheet.
Sample script 2:
In this sample script, the values of dataframe are put into the Spreadsheet using the existing header row in your Spreadsheet. The header row of the Spreadsheet is retrieved by "Method: spreadsheets.values.get". And, the header row is updated by "Method: spreadsheets.values.update".
# This sample value is from your question.
df = pd.DataFrame([["2017-08-07", 52, 52, 32], ["2017-08-08", 726, 45, 53]], columns=["date", "kfc", "burgerking", "anw"])
gsheetid = "###" # Please set your Spreadsheet ID.
sheet_name = "Sheet1" # Please set sheet name.
service = build("sheets", "v4", credentials=creds) # Please use your script here.
header = service.spreadsheets().values().get(spreadsheetId=gsheetid, range=sheet_name).execute()["values"][0]
dic = df.to_dict("records")
add_header = [k for k in dic[0].keys() if k not in header]
header = [*header, *add_header]
new_list = []
for o in dic:
temp = []
for h in header:
temp.append(o[h] if h in o else "")
new_list.append(temp)
if add_header != []:
service.spreadsheets().values().update(spreadsheetId=gsheetid,range=sheet_name,valueInputOption="USER_ENTERED",body={"values": [header]}).execute()
res = service.spreadsheets().values().append(spreadsheetId=gsheetid,range=sheet_name,valueInputOption="USER_ENTERED",insertDataOption="INSERT_ROWS",body={"values": new_list}).execute()
- When this script is run to your sample Spreadsheet, the header row is updated by a new header row of
['date', 'mcdonalds', 'kfc', 'anw', 'tacobell', 'burgerking']. And, the values of new_list of [['2017-08-07', '', 52, 32, '', 52], ['2017-08-08', '', 726, 53, '', 45]] are appended to the Spreadsheet.
References: