当元素中没有属性时,Pandas read_xml不起作用

chy5wohz  于 2023-08-01  发布在  其他
关注(0)|答案(2)|浏览(99)

我有下面的代码,它总是出错,并显示“ValueError:XPath不返回任何节点。确保行级节点在XPath中。如果document使用用xmln表示的名称空间,请确保定义名称空间并在xpath中使用它们。”
我试过几种方法,但还是不行。有什么想法吗?

import pandas as pd

sample_xml = '<Application Type="NewApplication" xmlns:pa="urn:Applyonline-Product-Attributes"><loanappBatch>some_data_here</loanappBatch></Application>'

df = pd.read_xml(
    sample_xml,
    xpath='.//pa:Application/pa:loanappBatch',
    namespaces={'pa': 'urn:Applyonline-Product-Attributes'}
)

print(df)

字符串
我希望没有错误,并且dataframe将显示一个值为“some_data_here”的字段。

xdyibdwo

xdyibdwo1#

你可以使用下面的代码片段。

import pandas as pd
import xml.etree.ElementTree as ET
sample_xml = '<Application Type="NewApplication" xmlns:pa="urn:Applyonline-Product-Attributes"><loanappBatch>some_data_here</loanappBatch></Application>'

root = ET.fromstring(sample_xml)
loanappBatch = root.find('.//{urn:Applyonline-Product-Attributes}loanappBatch').text
df = pd.DataFrame({'loanappBatch': [loanappBatch]})
print(df)

字符串


的数据

nuypyhwy

nuypyhwy2#

pandas.read_xml的实现有两个问题:

  • 根不使用命名空间前缀:pa
  • xpath返回文本值源,而不是元素的集合。根据文件:

XPath应该返回一个元素集合,而不是单个元素。
考虑这个问题的一种方法是,最终的列不应该在xpath中,但其父列应该在xpath中。
因此,要解决这个问题,只需将xpath调整到不需要命名空间分配的根级别,将其所有子节点迁移到数据框的列和行:

df = pd.read_xml(sample_xml, xpath='./Application')

字符串

相关问题