我试图从加拿大统计局 (“加拿大、省和地区”地理级别的XML选项)中读取一些加拿大人口普查数据。我看到xml文件是SDMX格式的,并且提供了一个结构文件,但我不知道如何从xml文件中读取数据。
在Python中似乎有两种选择,分别是pandasdmx和sdmx1,这两种选项都表示它们可以读取本地文件。当我尝试
import sdmx
datafile = '~/Documents/Python/Generic_98-401-X2016059.xml'
canada = sdmx.read_sdmx(datafile)它似乎读取前903行,然后生成以下内容:
Traceback (most recent call last):
File "/home/username/.local/lib/python3.10/site-packages/sdmx/reader/xml.py", line 238, in read_message
raise NotImplementedError(element.tag, event) from None
NotImplementedError: ('{http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message}GenericData', 'start')
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/username/.local/lib/python3.10/site-packages/sdmx/reader/__init__.py", line 126, in read_sdmx
return reader().read_message(obj, **kwargs)
File "/home/username/.local/lib/python3.10/site-packages/sdmx/reader/xml.py", line 259, in read_message
raise XMLParseError from exc
sdmx.exceptions.XMLParseError: NotImplementedError: ('{http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message}GenericData', 'start')发生这种情况是因为我没有加载sdmx文件的结构( StatsCan链接中的zip文件中的structure _98-401-X2016059.xml)?如果是这样的话,我如何加载它,并告诉sdmx在读取datafile时使用它
sdmx和pandasdmx的文档仅显示从在线提供商加载文件的示例,而不是从本地文件加载文件,因此我陷入困境。我对python的熟悉程度有限,所以我们非常感谢您的帮助。
作为参考,我可以使用rsdmx github的说明读取R中的文件。我希望能够在Python中做同样的/类似的事情。
提前谢谢。
发布于 2022-01-27 21:37:03
按照sdmx1开发人员的说法,StatsCan使用的是旧的、不受支持的SDMX版本(v.2.0)。目前的版本是2.1,rsdmx1只支持这一点(支持即将到来的v.3)。
发布于 2022-01-23 07:54:40
从对文件的粗略检查来看,加拿大统计局似乎不是默认包括在内的来源之一。但是有一个sdmx.add_source函数。我建议您尝试(在加载数据之前)。
https://stackoverflow.com/questions/70819834
复制相似问题