Python脚本向Google Sheets写入DataFrame时遇400错误求助
解决Google Sheets API发送DataFrame时的HttpError 400问题
错误原因
你遇到的400错误核心是传入Google Sheets API的values格式不符合要求。API要求values必须是二维数组结构:外层数组代表表格的行,每个子数组代表一行中的列值。但你用df.to_json()把整个DataFrame转成了一个单一的JSON字符串,这相当于给API传了只有一个元素的一维数组,完全不符合表格数据的预期结构,因此被API判定为无效值。
修正方案
要解决这个问题,需要把DataFrame转换成API要求的二维数组格式,而不是JSON字符串:
将DataFrame转为二维数组
先提取表头作为第一行,再把DataFrame的每一行数据转为子数组,拼接成完整的二维数组:# 提取表头 + 转换数据行为数组 values = [df.columns.tolist()] + df.values.tolist()修正API请求代码
替换原来的var2 = [df.to_json()],用上面生成的values作为请求体的values参数。
完整修正后的代码片段
# ... 保留前面的爬取和DataFrame处理代码 ... service = build('sheets', 'v4', credentials=creds) sheet = service.spreadsheets() # 转换DataFrame为Google Sheets API兼容的格式 values = [df.columns.tolist()] + df.values.tolist() request = sheet.values().update( spreadsheetId=gsheet, range="MasterTest!A1", valueInputOption="USER_ENTERED", body={"values": values} ).execute()
补充说明
- 这样处理后,表头会被写入
MasterTest工作表的第一行,后续行对应DataFrame的每一条数据,完美匹配Google Sheets的表格结构。 - 你之前用
df.fillna(0)处理了空值,这一步很必要,避免API遇到非数值类型的空值报错。 valueInputOption="USER_ENTERED"会让API自动解析数据格式(比如百分比、整数),和手动输入数据的效果一致。
内容的提问来源于stack exchange,提问作者DrFox
相关产品推荐
相关产品推荐

