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

使用pandasdmx时DataflowDefinition含下划线触发语法错误求助

解决pandasdmx访问数字开头标识符的语法错误

错误原因

Python用点语法访问对象属性时,属性名必须符合变量命名规则——不能以数字开头。你代码里的101_1015是以数字开头的标识符,直接用crops_msg.dataflow.101_1015会触发语法错误,这和下划线无关,是标识符开头的问题。

解决方法

改用字典索引方式访问该DataflowDefinition,把点语法换成方括号加引号的形式:

crops_flow = crops_msg.dataflow['101_1015']

额外代码问题修正

你的代码里还有几处需要调整的地方:

  • 缺少sys模块的导入,需在开头添加import sys
  • key和params变量未定义,要根据需求设置具体参数(比如筛选维度、时间范围等)
  • 最后一行的ecb应为istat,因为你用的是ISTAT数据源而非ECB

修正后的完整代码

import pandasdmx as sdmx
import sys

istat = sdmx.Request('ISTAT')

flow_msg = istat.dataflow()  # 下载数据源所有可用数据流的定义
print(flow_msg.response.url)  # 查看请求的URL
print(flow_msg.response.headers)  # 查看响应头
print(flow_msg)  # 查看解析后的响应内容

dataflows = sdmx.to_pandas(flow_msg.dataflow)  # 将元数据转换为pandas Series
print(dataflows.head())
print("该文件包含", len(dataflows), "个数据流定义")

crops_msg = istat.dataflow("101_1015")  # 下载ID为'101_1015'的数据流定义
print(crops_msg)

# 改用字典索引方式访问,修复语法错误
crops_flow = crops_msg.dataflow['101_1015']

dsd = crops_flow.structure
print(dsd)  # 查看数据流引用的数据结构定义

istat = sdmx.Client("ISTAT", backend="memory")

# 示例:定义key和params(需根据实际需求调整)
key = {'AREA': 'IT', 'ITEM': '...'}  # 替换为实际维度筛选条件
params = {'startPeriod': '2020', 'endPeriod': '2023'}  # 替换为实际时间范围

data_msg = istat.data("101_1015", key=key, params=params)
print(data_msg.response.headers["content-type"])  # 查看返回数据的内容类型

# 获取缓存响应的字节大小
bytes1 = sys.getsizeof(istat.session.cache.responses.popitem()[1]._content)
print(bytes1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:55:21