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

调用National Grid数据门户API导入CSV到pandas报JSONDecodeError问题

问题原因分析
  • 第一个低级错误:导入的是requests库,调用时写的request.get(url)拼写缺失末尾的s,会先触发NameError,即便修正拼写也会遇到后续JSON解析错误。
  • 核心逻辑错误:你请求的目标资源是CSV格式文件,返回内容为逗号分隔的纯文本,并非JSON结构,使用json.loads()解析CSV内容本身就是逻辑错配,这是触发JSONDecodeError: Expecting value: line 1 column 1 (char 0)的根本原因,和BOM处理无关。
正确实现方案

pandas的read_csv原生支持直接传入URL读取数据,同时内置编码处理能力,不需要手动下载文件到本地,也不需要额外做编码转码、JSON解析操作,可直接按如下写法实现需求:

import pandas as pd

url = 'https://data.nationalgrideso.com/backend/dataset/7e142b03-8650-4f46-8420-7ce1e84e1e5b/resource/a61c6c26-62ec-41e1-ae25-ed95f4562274/download/reactive-utilisation-data-apr-2020-mar-2022.csv'
# 指定encoding为utf-8-sig即可直接处理BOM标记
df = pd.read_csv(url, encoding='utf-8-sig')

如果需要先通过requests发起请求再解析,可通过io.StringIO包装响应文本后传入read_csv,写法如下:

import requests
import pandas as pd
from io import StringIO

url = 'https://data.nationalgrideso.com/backend/dataset/7e142b03-8650-4f46-8420-7ce1e84e1e5b/resource/a61c6c26-62ec-41e1-ae25-ed95f4562274/download/reactive-utilisation-data-apr-2020-mar-2022.csv'
resp = requests.get(url)
# 校验请求成功后再解析
if resp.status_code == 200:
    df = pd.read_csv(StringIO(resp.text), encoding='utf-8-sig')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:54:00