pandas.read_xml(path_or_buffer, xpath='./*', namespaces=None, elems_only=False, attrs_only=False, names=None, encoding='utf-8', parser='lxml', stylesheet=None, compression='infer', storage_options=None) [源代码]
将XML文档读入DataFrame对象。
1.3.0 新版功能。
参数: | path_or_buffer: 字符串,path对象(实现 或实现 字符串可以是任何有效的XML字符串或path。 该字符串还可以是URL。有效的URL包括http、ftp、s3和file。 xpath: 用于解析迁移到 XPath应该返回一个元素集合,而不是一个元素。 注意: 对于更复杂的XPath,使用需要安装的 namespaces: XML文档中定义的名称空间为字典, key为名称空间前缀,value为URI。 不需要在XML中包含所有名称空间, 只需要包含 注意:如果XML文档使用默认名称空间, 表示为 则必须为URI分配任何临时名称空间前缀, 如 'doc',以便解析底层节点和/或属性。例如, namespaces = {"doc": "https://example.com"} elems_only: 只解析指定 默认情况下,返回所有子元素和非空文本节点。 attrs_only: 只解析指定 names:list-like, 可选 已解析XML数据的DataFrame的列名。 使用此参数重命名原始元素名称,并区分相同的命名元素。 encoding:str, 可选的, 默认为 ‘utf-8’ XML 文档的编码。 parser: 用于检索数据的解析器模块。只支持‘lxml’ 和‘etree’。 使用“lxml”可以支持更复杂的XPath搜索和使用XSLT样式表的能力。 stylesheet: URL、file-like对象或包含XSLT脚本的原始字符串。 这个样式表应该使复杂的、深度嵌套的XML文档变得扁平, 从而更容易解析。要使用此特性, 必须安装
而不是原始XML文档。目前只支持XSLT 1.0脚本, 不支持更高的版本。 compression: 用于对磁盘上的数据进行实时解压。 如果'infer'和'path_or_buffer'是path-like, 那么检测以下扩展名的压缩:‘.gz’, ‘.bz2’, ‘.zip’, ‘.xz’, 或 ‘.zst’(否则不压缩)。如果使用'zip', 则zip文件必须只包含一个要读入的数据文件。 如果不解压,请设置为 键 其他键值对被转发到zipfile.ZipFile,
例如, 可以使用自定义压缩字典传递以下信息, 用于Zstandard解压缩:
注意:在1.4.0版更改:Zstandard支持。 storage_options: 对于特定存储连接有意义的额外选项,例如, 主机、端口、用户名、密码等。对于HTTP(S) url, 对于HTTP(S) url,键值对作为头选项转发到 对于其他url(例如, 以“s3://”,和“gcs://”开头)键-值对被转发到 请参阅 |
返回: | df
|
Notes
这种方法的最佳设计是导入以下格式的浅层XML文档,这种格式非常适合DataFrame
的二维(按列排列)。
<root> <row> <column1>data</column1> <column2>data</column2> <column3>data</column3> ... </row> <row> ... </row> ... </root>
作为一种文件格式,XML文档可以以任何方式设计,包括元素和属性的布局,只要它符合W3C规范。因此,该方法对于特定的扁平设计(而不是所有可能的XML结构)是一种方便的处理程序。
但是,对于更复杂的XML文档,样式表允许使用XSLT(一种特殊用途的语言)临时重新设计原始文档,以获得一个更均匀的的版本,以便迁移到DataFrame
。
此函数将始终返回单个DataFrame或由于XML文档、xpath
或其他参数的问题而引发异常。
例如,
>>> xml = '''<?xml version='1.0' encoding='utf-8'?>
... <data xmlns="http://example.com">
... <row>
... <shape>square</shape>
... <degrees>360</degrees>
... <sides>4.0</sides>
... </row>
... <row>
... <shape>circle</shape>
... <degrees>360</degrees>
... <sides/>
... </row>
... <row>
... <shape>triangle</shape>
... <degrees>180</degrees>
... <sides>3.0</sides>
... </row>
... </data>'''
>>> df = pd.read_xml(xml)
>>> df
shape degrees sides
0 square 360 4.0
1 circle 360 NaN
2 triangle 180 3.0
>>> xml = '''<?xml version='1.0' encoding='utf-8'?>
... <data>
... <row shape="square" degrees="360" sides="4.0"/>
... <row shape="circle" degrees="360"/>
... <row shape="triangle" degrees="180" sides="3.0"/>
... </data>'''
>>> df = pd.read_xml(xml, xpath=".//row")
>>> df
shape degrees sides
0 square 360 4.0
1 circle 360 NaN
2 triangle 180 3.0
>>> xml = '''<?xml version='1.0' encoding='utf-8'?>
... <doc:data xmlns:doc="https://example.com">
... <doc:row>
... <doc:shape>square</doc:shape>
... <doc:degrees>360</doc:degrees>
... <doc:sides>4.0</doc:sides>
... </doc:row>
... <doc:row>
... <doc:shape>circle</doc:shape>
... <doc:degrees>360</doc:degrees>
... <doc:sides/>
... </doc:row>
... <doc:row>
... <doc:shape>triangle</doc:shape>
... <doc:degrees>180</doc:degrees>
... <doc:sides>3.0</doc:sides>
... </doc:row>
... </doc:data>'''
>>> df = pd.read_xml(xml,
... xpath="//doc:row",
... namespaces={"doc": "https://example.com"})
>>> df
shape degrees sides
0 square 360 4.0
1 circle 360 NaN
2 triangle 180 3.0