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’}使用 str 或 object 与合适的 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 tozipfile.ZipFile
,gzip.GzipFile
,bz2.BZ2File
, orzstandard.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
。请看fsspec
和urllib
有关更多详细信息和有关存储选项的更多示例,请参阅 here 。
- 退货
- DF
一个数据帧。
注意事项
此方法最适合以以下格式导入浅层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