关于使用 gspread 检索数据和更新的问题

Question on using gspread to retrieve data and update

我有一个 google 点差sheet 我想检索: 这就是数据在 google sheet 上的显示方式。 'Business'是第一个header,第二行'Name','Age','Fav color'是第二个header。

Business
Name Age Fav color
a1 b1 Green
a2 b2 Green
a3 b3 Green
import gspread
import pandas as pd
import gspread_dataframe as gd

worksheet = sh.get_worksheet(index[0])
df = pd.DataFrame(final_worksheet.get_all_records())

当我得到工作时sheet,输出显示为:

Business
Name Fav color
a1 Green
a2 Green
a3 Green

这不是我要找的。

问题:我希望我可以获取包含姓名、年龄、收藏颜色作为列 headers 的数据框(没有业务 header),然后允许我插入一些值,以便最终输出(在 google spreadsheet 上)将是:

Business
Name Age Fav color
John 99 Blue
a1 b1 Green
a2 b2 Green
a3 b3 Green

这是我用来更新点差的代码sheet:

final_updated = updated.append(final_output)
gd.set_with_dataframe(final_worksheet, final_updated)

修改点:

  • 当使用 final_worksheet.get_all_records() 检索来自 sheet 的值时,返回以下值

      [{'': 'Fav color', 'Business': 'Name'}, {'': 'Green', 'Business': 'a1'}, {'': 'Green', 'Business': 'a2'}, {'': 'Green', 'Business': 'a3'}]
    
    • 我认为这可能是您遇到问题的原因。
    • 在这种情况下,如何从使用 get_all_values() 检索到的切片创建数据帧?
  • 关于I am hoping that I can grab the dataframe with Name, Age, Fav color as column headers (without the Business header) and then allow me to insert some values so that the final output (on google spreadsheet) would be:,这种情况下,用insert_rows()的方法怎么样?我认为在这种情况下,脚本可能会更简单。

  • 在您的脚本中,声明了 worksheet。但是好像没有声明final_worksheet

当以上几点反映到你的脚本中,就会变成下面这样。

修改后的脚本 1:

在这个修改后的脚本中,修改了df = pd.DataFrame(final_worksheet.get_all_records())

从:
df = pd.DataFrame(final_worksheet.get_all_records())
到:
v = final_worksheet.get_all_values()
df = pd.DataFrame(v[2:], columns=v[1])

修改脚本 2:

在这个修改后的脚本中,要插入的行是使用insert_rows()的方法放置的。

从:
worksheet = sh.get_worksheet(index[0])
df = pd.DataFrame(final_worksheet.get_all_records())
到:
worksheet = sh.get_worksheet(index[0])
worksheet.insert_rows([['John', 99, 'Blue']], row=3, value_input_option='USER_ENTERED')
  • 此时[['John', 99, 'Blue']]的值可以直接插入第3行

参考文献: