使用pandas read_xml()解析带属性XML返回NaN问题求助
解决pandas read_xml提取XML标签属性值的问题
你的问题出在read_xml默认会提取标签的文本内容,但你的数据存储在子标签的value属性中,同时XML带有命名空间,需要调整参数来指定提取属性值。
修正后的代码
import pandas as pd xml = '''<?xml version='1.0' encoding='utf-8'?> <doc:data xmlns:doc="https://example.com"> <doc:row> <doc:shape value="triangle" /> <doc:degrees value="180" /> <doc:sides value="3.0"/> </doc:row> <doc:row> <doc:shape value="triangle" /> <doc:degrees value="180" /> <doc:sides value="3.0"/> </doc:row> <doc:row> <doc:shape value="triangle" /> <doc:degrees value="180" /> <doc:sides value="3.0"/> </doc:row> </doc:data>''' df = pd.read_xml( xml, xpath="//doc:row", namespaces={"doc": "https://example.com"}, element_path="./*", attrs_only=True, names={"value": None} ) print(df)
参数说明
element_path="./*":指定解析每个doc:row节点下的所有子元素(即doc:shape、doc:degrees、doc:sides)attrs_only=True:告诉pandas只提取子元素的属性内容,忽略标签文本names={"value": None}:将子元素的value属性值作为对应列(列名自动使用子元素的标签名)的内容
输出结果
shape degrees sides 0 triangle 180 3.0 1 triangle 180 3.0 2 triangle 180 3.0
内容的提问来源于stack exchange,提问作者Python_coding
相关产品推荐
相关产品推荐

