正在获取家长、孩子及其孩子的文本


<avis>
<numeroseao>1331795</numeroseao>
<numero>61628-3435560</numero>
<organisme>Ville de Québec</organisme>
<fournisseurs>
<fournisseur>
<nomorganisation>APEL ASSOCIATION POUT DU LA MARAISNORD</nomorganisation>
<adjudicataire>1</adjudicataire>
<montantsoumis>0.000000</montantsoumis>
<montantssoumisunite>0</montantssoumisunite>
<montantcontrat>89732.240000</montantcontrat>
<montanttotalcontrat>0.000000</montanttotalcontrat>
</fournisseur>
</fournisseurs>
</avis>

所以有avis,avis有四个节点,四个节点有更多的节点。如何将这些值获取到数据帧?

我正在使用以下代码

element_tree = ET.parse('D:\python_script\temp2\AvisRevisions_20200201_20200229.xml')
root = element_tree.getroot()
for child in root.findall('.//avis/*/*/*'):

for child in root.findall('.//avis/*'):

但它只得到父节点或子节点,而不是全部。

由于您的数据不是平面的,当您将xml直接导入panda时,可能会导致问题。在这种情况下,像pandas_read_xml这样的库可能很有用:

import pandas_read_xml as pdx
df = pdx.read_xml(xml)
df = pdx.fully_flatten(df)  # this should get you the structure you want

在上面的行中,xml变量是您的"AvisVision_200201_20200229.xml";文件


对于更平坦的结构,您可以使用Pandas:

import pandas as pd
df = pd.read_xml(xml, xpath="//fournisseurs")

如果你正在寻找整个";avis";部分,您可以将xpath参数替换为:

df = pd.read_xml(xml, xpath="//avis")

由此,panda应该创建具有适当列的数据帧。这是Pandas文档的链接。

尝试以下

import xml.etree.ElementTree as ET
import pandas as pd
xml = '''<avis>
<numeroseao>1331795</numeroseao>
<numero>61628-3435560</numero>
<organisme>Ville de Québec</organisme>
<fournisseurs>
<fournisseur>
<nomorganisation>APEL ASSOCIATION POUT DU LA MARAISNORD</nomorganisation>
<adjudicataire>1</adjudicataire>
<montantsoumis>0.000000</montantsoumis>
<montantssoumisunite>0</montantssoumisunite>
<montantcontrat>89732.240000</montantcontrat>
<montanttotalcontrat>0.000000</montanttotalcontrat>
</fournisseur>
</fournisseurs>
</avis>'''
root = ET.fromstring(xml)
data = []
fournisseur = root.find('.//fournisseur')
data.append({e.tag:e.text for e in fournisseur})
df = pd.DataFrame(data)

相关内容

最新更新