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

使用Google Sheets API读取欧洲区域设置数值数据时的解析错误问题

Google Sheets API读取欧洲区域设置数值数据时的解析错误问题

我完全懂你碰到的这个糟心事——欧洲区域里用逗号当小数点,结果用worksheet.get_all_records()读取时,API直接把逗号当成无关字符去掉,把2296,00变成229600,把5,36变成536,数值全乱了。

这问题根源在于get_all_records()方法默认是按美式区域规则解析数值的,它只认点.当小数点,遇到逗号就会当成千位分隔符直接忽略,自然就把数值放大了100倍。

给你两个实用的解决办法:

方法一:手动处理原始字符串(推荐)

放弃API自动转换类型的功能,先用get_all_values()拿到原始的字符串数据,再自己处理格式转换:

import pandas as pd

# 获取原始字符串数据,不做自动类型转换
raw_data = worksheet.get_all_values()
# 提取列名和数据行
column_names = raw_data[0]
data_rows = raw_data[1:]

# 初始化DataFrame
df = pd.DataFrame(data_rows, columns=column_names)

# 处理带逗号的数值列:替换逗号为点,转成float
numeric_cols = ['product_price', 'ctr', 'avg_click_price', 'total_spent']
for col in numeric_cols:
    if col in df.columns:
        # 处理空值情况,避免报错
        df[col] = df[col].apply(
            lambda x: float(x.replace(',', '.')) if pd.notna(x) and x.strip() != '' else None
        )

# 处理整数列
integer_cols = ['impressions', 'clicks', 'orders']
for col in integer_cols:
    if col in df.columns:
        df[col] = df[col].astype(int, errors='ignore')

这种方法完全可控,不管源表格用什么区域格式,你都能自己定义解析规则,不会受API默认行为影响。

方法二:修改源表格格式(可选)

如果你有权限修改Google Sheets的格式,可以把这些数值列的格式改成「数字」类型,并设置小数点为.。这样API读取时就能正确识别数值了,但缺点是可能不符合你所在区域的使用习惯,适合临时测试或者不需要遵循欧洲格式的场景。

另外提醒下,处理数据时最好加上空值判断,避免因为单元格为空或者格式异常导致代码报错。

备注:内容来源于stack exchange,提问作者Anton Mislawsky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 11:14:51