You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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字符串:

  1. 将DataFrame转为二维数组
    先提取表头作为第一行,再把DataFrame的每一行数据转为子数组,拼接成完整的二维数组:

    # 提取表头 + 转换数据行为数组
    values = [df.columns.tolist()] + df.values.tolist()
    
  2. 修正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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:20:27