我相信您的目标如下。
- 您有一个电子表格,如问题的第一个表所示。
- 您的数据框如问题的第二个表所示。
- 您希望通过检查标题行将数据框的值附加到电子表格。
- 您想使用 python 的 googleapis 来实现这一点。
- 您已经使用 Sheets API 获取 Google 电子表格中的值并将其放入其中。
在这种情况下,下面的示例脚本怎么样?
示例脚本1:
在此示例脚本中,使用电子表格中的现有标题行将数据框的值放入电子表格中。电子表格的标题行通过“方法: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()
- 当此脚本运行到您的示例电子表格时,值
new_list
of [['2017-08-07', '', 52, 32, ''], ['2017-08-08', '', 726, 53, '']]
附加到电子表格中。
示例脚本2:
在此示例脚本中,使用电子表格中的现有标题行将数据框的值放入电子表格中。电子表格的标题行通过“方法:spreadsheets.values.get”检索。并且,标题行由“方法: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()
- 当此脚本运行到您的示例电子表格时,标题行将由新的标题行更新
['date', 'mcdonalds', 'kfc', 'anw', 'tacobell', 'burgerking']
。并且,值new_list
of [['2017-08-07', '', 52, 32, '', 52], ['2017-08-08', '', 726, 53, '', 45]]
附加到电子表格中。
参考:
- 方法:spreadsheets.values.get https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/get
- 方法:spreadsheets.values.update https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/update