使用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
相关产品推荐
相关产品推荐

