使用Python向Google Sheet追加数据时遇APIError问题求助
问题分析与解决方法
核心错误原因
你调用append_rows()时传入的是JSON字符串(通过to_json()生成),但这个方法要求的参数是二维列表格式的数据集,这直接导致了Google Sheets API返回400参数错误。
修正步骤
- 将处理后的DataFrame转换为二维列表:用
DataFrame.values.tolist()方法替代to_json(),这会把表格数据转换成符合append_rows()要求的格式。 - (可选)如果需要追加表头,可单独提取表头转为列表后先写入一次(避免循环里重复写入)。
- 确保每个冲浪点的数据都以正确格式追加到目标工作表。
修正后的代码
import requests import pandas as pd import gspread gc = gspread.service_account(filename='creds.json') sh = gc.open_by_key('152qSpr-4nK9V5uHOiYOWTWUx4ojjVNZMdSmFYov-n50') waveData = sh.get_worksheet(0) tideData = sh.get_worksheet(1) lightData = sh.get_worksheet(2) id_list = [ '/Belmar-Surf-Report/3683/', '/Manasquan-Surf-Report/386/', '/Ocean-Grove-Surf-Report/7945/', '/Asbury-Park-Surf-Report/857/', '/Avon-Surf-Report/4050/', '/Bay-Head-Surf-Report/4951/', '/Belmar-Surf-Report/3683/', '/Boardwalk-Surf-Report/9183/', ] # (可选)先写入表头,仅执行一次 # header = pd.read_html(requests.get('http://magicseaweed.com' + id_list[0]).text)[2].iloc[:9, [0,1,2,3,4,6,7,12,15]].columns.tolist() # waveData.append_rows([header], value_input_option="USER_ENTERED") for x in id_list: # 提取表格数据并转为二维列表 df = pd.read_html(requests.get('http://magicseaweed.com' + x).text)[2].iloc[:9, [0,1,2,3,4,6,7,12,15]] data_rows = df.values.tolist() # 追加到工作表 waveData.append_rows(data_rows, value_input_option="USER_ENTERED")
额外说明
如果要处理另外两个工作表(tideData、lightData),逻辑完全一致:只需提取对应位置的表格(比如pd.read_html(...)的索引从[2]换成[0]或[1]),转换为二维列表后调用对应工作表的append_rows()方法即可。
内容的提问来源于stack exchange,提问作者Anthony Madle
相关产品推荐
相关产品推荐

