请翻译以下为中文:#
- pandas.read_xml(path_or_buffer, *, xpath='./*', namespaces=None, elems_only=False, attrs_only=False, names=None, dtype=None, converters=None, parse_dates=None, encoding='utf-8', parser='lxml', stylesheet=None, iterparse=None, compression='infer', storage_options=None, dtype_backend=<no_default>)[源代码][源代码]#
将 XML 文档读取到一个
DataFrame
对象中。Added in version 1.3.0.
- 参数:
- path_or_buffer字符串, 路径对象, 或类文件对象
字符串、路径对象(实现
os.PathLike[str]
),或实现read()
函数的类文件对象。字符串可以是一个路径。字符串还可以是一个 URL。有效的 URL 方案包括 http、ftp、s3 和 file。自 2.1.0 版本弃用: 传递 xml 字面字符串已被弃用。请将字面 xml 输入包裹在
io.StringIO
或io.BytesIO
中。- xpath : str, 可选, 默认 ‘./*’str, 可选, 默认 ‘./*’
用于解析迁移到
DataFrame
所需节点集合的XPath
。XPath
应返回元素集合而不是单个元素。注意:etree
解析器支持有限的XPath
表达式。对于更复杂的XPath
,使用需要安装的lxml
。- 命名空间dict, 可选
在XML文档中定义的命名空间作为字典,其中键是命名空间前缀,值是URI。不需要在XML中包含所有命名空间,只需要包含在``xpath``表达式中使用的命名空间。注意:如果XML文档使用默认命名空间表示为`xmlns=’<URI>’`且没有前缀,则必须将任何临时命名空间前缀(例如’doc’)分配给URI,以便解析底层节点和/或属性。
- elems_onlybool, 可选, 默认 False
仅解析指定
xpath
的子元素。默认情况下,返回所有子元素和非空文本节点。- attrs_onlybool, 可选, 默认 False
仅解析指定
xpath
处的属性。默认情况下,返回所有属性。- 名称类似列表的,可选的
解析的XML数据的DataFrame的列名。使用此参数重命名原始元素名称并区分同名元素和属性。
- dtype类型名称或列 -> 类型的字典,可选
数据的类型或列的类型。例如:{‘a’: np.float64, ‘b’: np.int32, ‘c’: ‘Int64’} 使用 str 或 object 以及合适的 na_values 设置来保留并不解释数据类型。如果指定了转换器,它们将代替数据类型转换应用。
Added in version 1.5.0.
- 转换器dict, 可选
用于转换某些列中值的函数字典。键可以是整数或列标签。
Added in version 1.5.0.
- parse_dates布尔值或整数或名称列表或列表的列表或字典,默认值为 False
解析索引或列到日期时间的标识符。行为如下:
布尔值。如果为真 -> 尝试解析索引。
整数列表或名称。例如,如果 [1, 2, 3] -> 尝试将第1、2、3列分别解析为单独的日期列。
列表的列表。例如,如果 [[1, 3]] -> 合并第1列和第3列,并解析为一个单独的日期列。
字典, 例如 {‘foo’ : [1, 3]} -> 将第1、3列解析为日期并调用结果为 ‘foo’
Added in version 1.5.0.
- 编码str, 可选, 默认 ‘utf-8’
XML 文档的编码。
- 解析器{‘lxml’,’etree’},默认 ‘lxml’
用于检索数据的解析器模块。仅支持 ‘lxml’ 和 ‘etree’。使用 ‘lxml’ 可以支持更复杂的
XPath
搜索和使用 XSLT 样式表的能力。- 样式表str, 路径对象或类文件对象
一个 URL、类文件对象或包含 XSLT 脚本的字符串路径。此样式表应简化复杂、深度嵌套的 XML 文档,以便于解析。要使用此功能,您必须安装
lxml
模块,并将 ‘lxml’ 指定为parser
。xpath
必须引用 XSLT 转换后生成的转换 XML 文档的节点,而不是原始 XML 文档的节点。目前仅支持 XSLT 1.0 脚本,不支持更高版本。- iterparsedict, 可选
在XML文档的iterparsing中要检索的节点或属性,作为字典,其中键是重复元素的名称,值是重复元素的后代元素或属性名称的列表。注意:如果使用此选项,它将替换
xpath
解析,并且与xpath
不同,后代不需要相互关联,但可以在文档中的任何位置存在于重复元素下。这种内存高效的方法应用于非常大的XML文件(500MB、1GB或5GB+)。例如,{"row_element": ["child_elem", "attr", "grandchild_elem"]}
。Added in version 1.5.0.
- 压缩str 或 dict,默认 ‘infer’
用于即时解压磁盘数据。如果 ‘infer’ 并且 ‘path_or_buffer’ 是类路径,则从以下扩展名检测压缩:’.gz’, ‘.bz2’, ‘.zip’, ‘.xz’, ‘.zst’, ‘.tar’, ‘.tar.gz’, ‘.tar.xz’ 或 ‘.tar.bz2’(否则不压缩)。如果使用 ‘zip’ 或 ‘tar’,ZIP 文件必须仅包含一个要读取的数据文件。设置为
None
表示不解压。也可以是一个字典,键'method'
设置为 {'zip'
,'gzip'
,'bz2'
,'zstd'
,'xz'
,'tar'
} 之一,其他键值对将转发给zipfile.ZipFile
,gzip.GzipFile
,bz2.BZ2File
,zstandard.ZstdDecompressor
,lzma.LZMAFile
或tarfile.TarFile
,分别。例如,以下内容可以传递用于使用自定义压缩字典的 Zstandard 解压:compression={'method': 'zstd', 'dict_data': my_compression_dict}
。Added in version 1.5.0: 增加了对 .tar 文件的支持。
在 1.4.0 版本发生变更: Zstandard 支持。
- storage_optionsdict, 可选
对于特定存储连接有意义的额外选项,例如主机、端口、用户名、密码等。对于HTTP(S) URL,键值对会作为头选项转发到
urllib.request.Request
。对于其他URL(例如以“s3://”和“gcs://”开头),键值对会转发到fsspec.open
。请参阅fsspec
和urllib
获取更多详细信息,关于存储选项的更多示例请参考 这里。- dtype_backend{‘numpy_nullable’, ‘pyarrow’}
应用于结果
DataFrame
的后端数据类型(仍在实验中)。如果未指定,默认行为是不使用可空数据类型。如果指定,行为如下:"numpy_nullable"
: 返回支持可空数据类型的DataFrame
"pyarrow"
: 返回由 pyarrow 支持的可空ArrowDtype
DataFrame
Added in version 2.0.
- 返回:
- df
一个 DataFrame。
备注
这种方法最适合导入以下格式的浅层XML文档,这是``DataFrame``(行和列)两个维度的理想匹配。:
<root> <row> <column1>data</column1> <column2>data</column2> <column3>data</column3> ... </row> <row> ... </row> ... </root>
作为一种文件格式,XML 文档可以以任何方式设计,包括元素和属性的布局,只要它符合 W3C 规范。因此,这种方法是针对特定扁平设计的便利处理程序,而不是所有可能的 XML 结构。
然而,对于更复杂的XML文档,
stylesheet
允许你使用XSLT(一种特殊用途的语言)临时重新设计原始文档,以获得更扁平化的版本,便于迁移到DataFrame。这个函数将 总是 返回一个单一的
DataFrame
或者由于XML文档、xpath
或其他参数的问题而引发异常。有关使用此方法将XML文件解析为DataFrame的更多信息,请参阅文档IO部分中的 read_xml 文档。
例子
>>> from io import StringIO >>> 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(StringIO(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(StringIO(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( ... StringIO(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
>>> xml_data = ''' ... <data> ... <row> ... <index>0</index> ... <a>1</a> ... <b>2.5</b> ... <c>True</c> ... <d>a</d> ... <e>2019-12-31 00:00:00</e> ... </row> ... <row> ... <index>1</index> ... <b>4.5</b> ... <c>False</c> ... <d>b</d> ... <e>2019-12-31 00:00:00</e> ... </row> ... </data> ... '''
>>> df = pd.read_xml( ... StringIO(xml_data), dtype_backend="numpy_nullable", parse_dates=["e"] ... ) >>> df index a b c d e 0 0 1 2.5 True a 2019-12-31 1 1 <NA> 4.5 False b 2019-12-31