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

