You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas read_xml从两个XML父节点导入数据到DataFrame

解决XML导入Pandas时关联AgentID与Sale数据的问题

直接传入xpath列表['//AgentID', '//Sale']行不通,因为Pandas的read_xml对xpath列表的处理是读取多个独立节点集合并尝试合并,无法关联父子节点的对应关系。你可以通过以下两种方法实现需求:

方法一:利用elems_to_row参数自动关联

这是最简洁的方式,通过指定父节点//Sales,并设置elems_to_row='Sale',让Pandas将每个Sale子节点拆分为单独行,同时保留父节点下的AgentID:

import pandas as pd

test_xml = '''<TEST_XML>
        <Sales>
            <AgentID>0001</AgentID>
            <Sale>
                <Location>0</Location>
                <Size>1000</Size>
                <Status>Available</Status>
            </Sale>
            <Sale>
                <Location>1</Location>
                <Size>500</Size>
                <Status>Unavailable</Status>
            </Sale>
        </Sales>
    </TEST_XML>'''

df = pd.read_xml(test_xml, xpath='//Sales', elems_to_row='Sale')
# 调整列顺序(可选)
df = df[['AgentID', 'Location', 'Size', 'Status']]

运行后得到的DataFrame就是你期望的结果:

AgentID Location  Size      Status
0    0001        0  1000    Available
1    0001        1   500  Unavailable

方法二:手动提取AgentID后合并

如果需要更灵活的处理(比如多组Sales节点),可以分开提取数据再合并:

# 提取Sale节点数据
df_sales = pd.read_xml(test_xml, xpath='//Sale')
# 提取AgentID值
agent_id = pd.read_xml(test_xml, xpath='//AgentID').iloc[0, 0]
# 添加AgentID列并调整顺序
df_sales['AgentID'] = agent_id
df_sales = df_sales[['AgentID', 'Location', 'Size', 'Status']]

这种方法适合需要对AgentID做额外处理的场景,比如循环处理多个Sales节点时,可以逐个提取对应AgentID并赋值给其下的Sale行。

内容的提问来源于stack exchange,提问作者marillion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 07:05:18