【问题标题】:Using pandas read_xml to generate a Dataframe使用 pandas read_xml 生成 Dataframe
【发布时间】:2021-08-19 14:38:55
【问题描述】:

我正在尝试将 XML 文档(如下所示)写入 pandas 数据框。我正在使用df = pd.read_xml(doc.xml, xpath='//Generator)',但我一直收到错误消息ValueError: xpath does not return any nodes. Be sure row level nodes are in xpath. If document uses namespaces denoted with xmlns, be sure to define namespaces and use them in xpath.我还尝试将 xmlns=url 和 xmlns:xsi=url 添加到namespace= 参数,但没有成功。我似乎无法弄清楚我做错了什么。任何帮助将不胜感激。

我的 XML 文档如下所示:

<?xml-stylesheet type="text/xsl" href="url"?>
<IMODocument docID="document" xmlns="url" xmlns:xsi="url" xsi:schemaLocation="url">
    <IMODocHeader>
        <DocTitle>
            Generators Output and Capability Report
        </DocTitle>
        <DocRevision>
            4
        </DocRevision>
        <DocConfidentiality>
            <DocConfClass>
                PUB
            </DocConfClass>
        </DocConfidentiality>
        <CreatedAt>
            2021-08-18T10:15:50
        </CreatedAt>
    </IMODocHeader>
    <IMODocBody>
        <Date>
            2021-08-18
        </Date>
        <Generators> //Portion i'm trying to write into a data frame
            <Generator>
            </Generator>
            <Generator>
            </Generator>
            <Generator>
            </Generator>
            <Generator>
            </Generator>
            <Generator>
            </Generator>
            <Generator>
            </Generator>
            <Generator>
            </Generator>
        </Generators> // ----------------end-------------------
    </IMODocBody>
</IMODocument>```

【问题讨论】:

  • 您可以改用 xmltodict 包:pypi.org/project/xmltodict。它将 XML 作为字典加载,然后您可以使用 pd.json_normalize() 将其转换为数据帧。
  • DF 应该是什么样子的?

标签: python pandas xml dataframe xpath


【解决方案1】:

这似乎与命名空间无关。如果您尝试将 xpath 表达式从 = 更改为 contains(),如下所示:

df = pd.read_xml(doc.xml, xpath='//*[contains(name(),"Generator")]')

它似乎工作,至少对我来说你的示例 xml。

不知道为什么会这样;一个错误?

【讨论】:

  • 这很奇怪......它也没有按照我的预期格式化。我有点认为这会像 pandas read_csv 或 read_excel 一样简单,但这似乎要复杂得多
  • @ZacharyMcArthur 确实; read_xml() 是全新的,所以这可能是问题的一部分。
猜你喜欢
  • 2020-07-31
  • 1970-01-01
  • 2023-03-21
  • 2018-07-26
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 2021-12-26
  • 2020-05-23
相关资源
最近更新 更多