pandas.read_xml#

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)[源代码]#

将XML文档读取到 DataFrame 对象。

1.3.0 新版功能.

参数
path_or_buffer字符串、路径对象或类似文件的对象

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

XPath :str,可选,默认‘./*’字符串,可选,默认‘./*’

用于解析迁移到DataFrame所需节点集的XPath。XPath应该返回一个元素集合,而不是单个元素。注: etree 解析器支持有限的XPath表达式。对于更复杂的XPath,请使用 lxml 这需要安装。

namespacesDICT,可选

在XML文档中定义为字典的命名空间,键为命名空间前缀,取值为URI。不需要在XML中包含所有名称空间,只需包含 xpath 表情。注意:如果XML文档使用默认命名空间,则表示为 xmlns='<URI>' 如果没有前缀,则必须为URI分配任何临时命名空间前缀,如‘doc’,才能解析基础节点和/或属性。例如::

namespaces = {"doc": "https://example.com"}
elems_only布尔值,可选,缺省为FALSE

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

attrs_only布尔值,可选,缺省为FALSE

仅分析位于指定 xpath 。默认情况下,返回所有属性。

names类似列表,可选

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

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

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

1.5.0 新版功能.

convertersDICT,可选

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

1.5.0 新版功能.

parse_dates整数或名称的布尔或列表,或列表或词典的列表,默认为FALSE

要将索引或列解析为DateTime的标识符。其行为如下:

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

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

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

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

1.5.0 新版功能.

encoding字符串,可选,默认‘utf-8’

对XML文档进行编码。

parser{‘lxml’,‘etree’},默认‘lxml’

用于检索数据的解析器模块。仅支持‘lxml’和‘etree’。使用‘lxml’可以支持更复杂的XPath搜索和使用XSLT样式表的能力。

stylesheet字符串、路径对象或类文件对象

URL、类似文件的对象或包含XSLT脚本的原始字符串。该样式表应该扁平化复杂的、深度嵌套的XML文档,以便更容易地进行解析。要使用此功能,您必须拥有 lxml 模块已安装,并将‘lxml’指定为 parser 。这个 xpath 必须引用XSLT转换后生成的已转换的XML文档的节点,而不是原始的XML文档。目前仅支持XSLT 1.0脚本,不支持更高版本。

iterparseDICT,可选

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

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

1.5.0 新版功能.

compression字符串或词典,默认为‘INFER’

For on-the-fly decompression of on-disk data. If 'infer' and 'path_or_buffer' is path-like, then detect compression from the following extensions: '.gz', '.bz2', '.zip', '.xz', or '.zst' (otherwise no compression). If using 'zip', the ZIP file must contain only one data file to be read in. Set to None for no decompression. Can also be a dict with key 'method' set to one of {'zip', 'gzip', 'bz2', 'zstd'} and other key-value pairs are forwarded to zipfile.ZipFile, gzip.GzipFile, bz2.BZ2File, or zstandard.ZstdDecompressor, respectively. As an example, the following could be passed for Zstandard decompression using a custom compression dictionary: compression={'method': 'zstd', 'dict_data': my_compression_dict}.

在 1.4.0 版更改: Z标准支持。

storage_optionsDICT,可选

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

退货
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>

作为一种文件格式,只要符合W3C规范,就可以以任何方式设计XML文档,包括元素和属性的布局。因此,对于特定的扁平化设计和并非所有可能的XML结构,此方法是一个方便的处理程序。

但是,对于更复杂的XML文档, stylesheet 允许您使用XSLT(一种特殊用途语言)临时重新设计原始文档,以获得更平坦的版本,以便迁移到DataFrame。

此函数将 始终 退回一张单曲 DataFrame 或者由于XML文档的问题而引发异常, xpath 或其他参数。

请参阅 read_xml documentation in the IO section of the docs 有关使用此方法将XML文件分析为DataFrame的更多信息。

示例

>>> 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