关于使用 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行
参考文献:
我有一个 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行