无需Google Sheets API将谷歌表格导入Pandas的ParserError报错解决
谷歌表格无需API读取的ParserError报错解决方案
你遇到的ParserError: Error tokenizing data. C error: Expected 1 fields in line 6, saw 2报错,核心原因是谷歌表格导出的CSV文件前几行存在合并单元格、备注说明等非结构化内容,导致行列数和pandas默认解析规则不匹配,可通过以下方法解决,全程无需谷歌API身份验证:
- 方案1:直接跳过异常前置行
报错提示第6行存在列数异常,说明前5行均为无效内容,可通过skiprows参数直接跳过前N行:
import pandas as pd googleSheetId = '1231SDFS3afer3SDfsdf-34SDFSDgfdsd42' worksheetName = 'abcde' start_url = f"https://docs.google.com/spreadsheets/d/{googleSheetId}/gviz/tq?tqx=out:csv&sheet={worksheetName}" url = start_url.replace(" ","") # 跳过前5行,可根据表格实际前置内容行数调整参数值 df = pd.read_csv(url, skiprows=5)
- 方案2:增加容错参数兼容异常格式
如果是局部行存在列数异常、分隔符识别错误的问题,可通过容错参数兼容:
df = pd.read_csv( url, sep=',', # 显式指定逗号为分隔符,避免自动识别错误 on_bad_lines='skip', # 跳过列数不匹配的异常行,也可设为'warn'仅输出告警 engine='python' # 替换默认C引擎为Python引擎,容错性更高 )
- 方案3:先拉取原始内容再手动清洗
如果上述方案都不符合需求,可先拉取CSV原始内容,手动清洗后再交给pandas解析:
import requests import pandas as pd from io import StringIO googleSheetId = '1231SDFS3afer3SDfsdf-34SDFSDgfdsd42' worksheetName = 'abcde' start_url = f"https://docs.google.com/spreadsheets/d/{googleSheetId}/gviz/tq?tqx=out:csv&sheet={worksheetName}" url = start_url.replace(" ","") resp = requests.get(url) resp.encoding = 'utf-8' # 自行截取有效行,示例为从第6行开始读取 valid_lines = resp.text.splitlines()[5:] df = pd.read_csv(StringIO('\n'.join(valid_lines)))
注意事项
- 操作前需确认谷歌表格权限已设置为「所有知道链接的用户可查看」,否则返回的权限校验页面内容也会触发解析报错
- 若工作表名称包含特殊字符、空格,需要先做URL编码后再拼接到请求链接中
内容的提问来源于stack exchange,提问作者abq.215
相关产品推荐
相关产品推荐

