pandas.read_xml #

熊猫。read_xml ( path_or_buffer , * , xpath = './*' ,命名空间= None , elems_only = False , attrs_only = False ,名称= None , dtype = None ,转换器= None , parse_dates = None ,编码= 'utf-8' , parser = 'lxml' , stylesheet = None , iterparse = None , compression = 'infer' , storage_options = None , dtype_backend = _NoDefault.no_default ) [来源] #

将 XML 文档读入DataFrame对象。

1.3.0 版本中的新增功能。

参数
path_or_buffer str,路径对象或类文件对象

字符串、路径对象(实现os.PathLike[str])或实现read()函数的类文件对象。该字符串可以是任何有效的 XML 字符串或路径。该字符串还可以是URL。有效的 URL 方案包括 http、ftp、s3 和 file。

自版本 2.1.0 起已弃用:不推荐使用传递 xml 文字字符串。将文字 xml 输入包装在io.StringIOorio.BytesIO中。

xpath str,可选,默认'./*'

解析XPath迁移到 .``XPath`` 所需的节点集 DataFrame应该返回元素集合而不是单个元素。注意:etree解析器支持有限的XPath 表达式。对于更复杂的情况XPathlxml需要安装才能使用。

命名空间字典,可选

XML 文档中将命名空间定义为字典,键为命名空间前缀,值为 URI。无需包含 XML 中的所有命名空间,只需包含xpath表达式中使用的命名空间即可。注意:如果 XML 文档使用不带前缀的xmlns='<URI>'表示的默认命名空间 ,则必须将任何临时命名空间前缀(例如“doc”)分配给 URI,以便解析底层节点和/或属性。例如,

namespaces = {"doc": "https://example.com"}
elems_only bool,可选,默认 False

仅解析指定的子元素xpath。默认情况下,返回所有子元素和非空文本节点。

attrs_only bool,可选,默认 False

仅解析指定的属性xpath。默认情况下,返回所有属性。

名称列表式,可选

已解析 XML 数据的 DataFrame 的列名称。使用此参数可以重命名原始元素名称并区分相同名称的元素和属性。

dtype列的类型名称或字典 -> 类型,可选

数据或列的数据类型。例如 {'a': np.float64, 'b': np.int32, 'c': 'Int64'} 将strobject与合适的na_values设置一起使用以保留而不是解释 dtype。如果指定了转换器,则将应用它们而不是数据类型转换。

1.5.0 版本中的新增内容。

转换器字典,可选

用于转换某些列中的值的函数字典。键可以是整数或列标签。

1.5.0 版本中的新增内容。

parse_dates bool 或 int 列表或名称列表或列表列表或 dict,默认 False

用于将索引或列解析为日期时间的标识符。行为如下:

  • 布尔值。如果 True -> 尝试解析索引。

  • int 或名称列表。例如,如果 [1, 2, 3] -> 尝试将第 1、2、3 列分别解析为单独的日期列。

  • 列表的列表。例如,如果 [[1, 3]] -> 合并第 1 列和第 3 列并解析为单个日期列。

  • dict, 例如 {'foo' : [1, 3]} -> 将第 1、3 列解析为日期并调用结果 'foo'

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 脚本,不支持更高版本。

iterparse字典,可选

在对 XML 文档进行迭代解析时要检索的节点或属性作为字典,其中键是重复元素的名称,值是作为重复元素的后代的元素或属性名称的列表。注意:如果使用此选项,它将取代xpath解析,并且与 不同的是xpath,后代不需要彼此关联,但可以存在于文档中重复元素下的任何位置。这种节省内存的方法适用于非常大的 XML 文件(500MB、1GB 或 5GB 以上)。例如,

iterparse = {"row_element": ["child_elem", "attr", "grandchild_elem"]}

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'之一的字典,其他键值对分别转发到 , , , ,或 。作为示例,可以使用自定义压缩字典传递以下内容以进行 Zstandard 解压缩: 。'zip''gzip''bz2''zstd''xz''tar'zipfile.ZipFilegzip.GzipFilebz2.BZ2Filezstandard.ZstdDecompressorlzma.LZMAFiletarfile.TarFilecompression={'method': 'zstd', 'dict_data': my_compression_dict}

1.5.0 版本中的新增功能:添加了对.tar文件的支持。

版本 1.4.0 中更改: Zstandard 支持。

storage_options字典,可选

对于特定存储连接有意义的额外选项,例如主机、端口、用户名、密码等。对于 HTTP(S) URL,键值对将urllib.request.Request作为标头选项转发。对于其他 URL(例如以“s3://”和“gcs://”开头),键值对将转发到fsspec.open。请参阅fsspecurllib了解更多详细信息,有关存储选项的更多示例,请参阅此处

dtype_backend {'numpy_nullable', 'pyarrow'}, 默认 'numpy_nullable'

应用于结果的后端数据类型DataFrame (仍处于试验阶段)。行为如下:

  • "numpy_nullable":返回 nullable-dtype-backed DataFrame (默认)。

  • "pyarrow":返回 pyarrow 支持的可为空的ArrowDtype DataFrame。

2.0版本中的新增内容。

返回
df

一个数据框。

也可以看看

read_json

将 JSON 字符串转换为 pandas 对象。

read_html

将 HTML 表读入 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。

由于 XML 文档、或其他参数的问题,此函数将始终返回单个或引发异常。DataFramexpath

有关使用此方法将 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