使用Python调用SingStat TableBuilder API下载数据仅返回元数据的问题
解决SingStat TableBuilder API仅返回元数据的问题
问题说明
你尝试通过SingStat TableBuilder API获取指定表格的数据,但当前代码仅返回元数据,无法拿到实际数值数据。
问题原因
- 请求参数设置不合理:比如
seriesNoORrowNo的取值可能对应不到有效数据行,或者timefilter、search等筛选条件限制过严,导致没有匹配到数据条目。 - 未完整查看API响应结构:可能实际数据存在于响应的其他字段中,或者参数错误导致
Data字段为空。
解决方案
1. 简化参数,先验证基础请求
先去掉不必要的筛选参数,确认API能正常返回数据:
import requests import pandas as pd # 简化请求,先获取表格的完整基础数据 url_path = "https://tablebuilder.singstat.gov.sg/api/table/tabledata/M250141" response = requests.get(url_path) if response.ok: data = response.json() # 先打印响应的所有键,确认结构 print("API响应包含的字段:", list(data.keys())) # 检查Data字段是否有内容 if data.get('Data'): df_SG_DATA = pd.DataFrame(data['Data']) print("获取到的数据:\n", df_SG_DATA) else: print("未获取到数据,可查看元数据确认表格结构:") if 'MetaData' in data: print(data['MetaData']) else: print(f"请求失败,状态码: {response.status_code}")
2. 调整筛选参数
- 核对
seriesNoORrowNo:这个参数对应表格中的行/系列编号,需要在网页版表格中确认目标数据对应的正确编号,确保不是13.1取值错误。 - 调整时间范围:如果仅指定
2013 1Q,可能该时间点无对应数据,尝试扩大范围,比如使用timefilter=2013%201Q%2C2024%204Q(表示2013年第一季度到2024年第四季度)。 - 移除不必要的筛选:暂时去掉
search=land、between=0%2C4等参数,先拿到完整数据后再做筛选。
3. 参考官方API文档
回到开发者页面,仔细核对每个参数的定义:比如seriesNoORrowNo的取值规则、timefilter的格式要求、limit和offset的分页逻辑,确保参数完全符合API要求。
内容的提问来源于stack exchange,提问作者prashanth manohar
相关产品推荐
相关产品推荐

