pandas.read_xml()解析无属性XML元素触发ValueError问题排查
问题原因与解决方案
报错原因
pandas.read_xml 默认优先解析目标元素的属性作为DataFrame的列。当<ELEM>没有属性、仅包含文本时,若只指定xpath为/ROOT/ELEM,pandas找不到可解析的属性,又未被明确告知要提取文本内容,就会抛出ValueError提示找不到节点或属性。
而当<ELEM>带有属性时,pandas会自动提取属性作为列,同时把元素的文本内容放到以元素名(ELEM)命名的列里,因此能正常生成DataFrame。
解决方案
要提取无属性元素的文本内容,需显式指定提取逻辑,以下两种方法均可实现:
方法1:直接提取文本节点
修改xpath指向元素的文本节点,并用names参数指定列名:
import pandas as pd # 示例XML内容 xml_content = """ <ROOT> <ELEM>第一行文本</ELEM> <ELEM>第二行文本</ELEM> <ELEM>第三行文本</ELEM> </ROOT> """ # 解析生成仅含文本列的DataFrame df = pd.read_xml(xml_content, xpath='/ROOT/ELEM/text()', names=['ELEM']) print(df)
方法2:使用elems_only参数(pandas 1.3+适用)
若不想修改xpath,可设置elems_only=True,强制pandas解析元素的文本内容而非属性:
df = pd.read_xml(xml_content, xpath='/ROOT/ELEM', elems_only=True, names=['ELEM'])
执行后即可得到仅包含<ELEM>文本内容的单列DataFrame。
内容的提问来源于stack exchange,提问作者Art Gertner
相关产品推荐
相关产品推荐

