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

使用gspread向Google Sheet写入DataFrame遇JSON合规性错误求助

解决「Out of range float values are not JSON compliant」错误

这个错误的核心原因是:Google Sheets API通过JSON格式传输数据,而你的DataFrame中包含了NaN、Infinity或-Infinity这类JSON标准不支持的特殊浮点值,导致序列化失败。以下是具体解决步骤:

1. 清理DataFrame中的特殊浮点值

先对要写入的DataFrame做预处理,把非JSON兼容的特殊值替换成合法内容(根据业务需求选择):

import pandas as pd
import numpy as np

# 假设你的DataFrame名为df
# 方案1:替换为空字符串(推荐,对应Sheet中的空单元格)
df_cleaned = df.replace([pd.NA, np.nan, np.inf, -np.inf], "")

# 方案2:替换为业务允许的数值(比如无穷值替换为极大/极小值,NaN替换为0)
# df_cleaned = df.replace([np.inf, -np.inf], 999999).fillna(0)

2. 确保用清理后的DataFrame写入

使用gspread_dataframe工具写入时,传入处理后的DataFrame:

from gspread_dataframe import set_with_dataframe

# 获取或创建brand2工作表
worksheet_list = [ws.title for ws in spreadsheet.worksheets()]
if "brand2" in worksheet_list:
    worksheet = spreadsheet.worksheet("brand2")
else:
    # 按需调整行数和列数
    worksheet = spreadsheet.add_worksheet(title="brand2", rows="1000", cols="20")

# 写入清理后的数据
set_with_dataframe(worksheet, df_cleaned)

3. 读取数据时提前处理(可选)

从brand工作表读取数据时,可能因公式返回错误(比如#DIV/0!)被解析为无穷值,建议读取后立即清理:

# 读取brand工作表数据
brand_worksheet = spreadsheet.worksheet("brand")
df = pd.DataFrame(brand_worksheet.get_all_records())

# 读取后直接清理特殊值
df = df.replace([np.inf, -np.inf], pd.NA).fillna("")

如果业务上需要保留特殊值的记录,可以将其转为字符串存储(比如把inf存为"inf"),但后续读取时需要额外做类型转换。

内容的提问来源于stack exchange,提问作者Cignitor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:45:16