提问人:ChemEnger 提问时间:8/31/2023 最后编辑:ChemEnger 更新时间:8/31/2023 访问量:41
将孙子 XML 解析为 pandas 数据帧
Parse grandchildren XML to pandas dataframe
问:
我看过各种问题和答案,但没有一个能完全满足我的需求。
我有格式的xml平面文件(由硬件SCADA系统生成)(编辑:之前草率的复制和粘贴,现在用第二个修复,并且有空字段):<row>
</STATUS>
<?xml version='1.0' encoding='UTF-8'?>
<doc>
<row>
<DATE>2022-01-14 06:04:18</DATE>
<MS>9</MS>
<POSITION_1>
<VALUE>53.9850 </VALUE>
<STATUSVALUE>1327104</STATUSVALUE>
<STATUS> +</STATUS>
</POSITION_1>
<POSITION_2>
<VALUE>54.3050 </VALUE>
<STATUSVALUE>1327104</STATUSVALUE>
<STATUS>-F- +</STATUS>
</POSITION_2>
<POSITION_3>
<VALUE>54.0450 </VALUE>
<STATUSVALUE>1327104</STATUSVALUE>
</STATUS>
</POSITION_3>
</row>
<row>
<DATE>2022-01-14 06:04:42</DATE>
<MS>302</MS>
<POSITION_1>
<VALUE>54.2600 </VALUE>
<STATUSVALUE>1327104</STATUSVALUE>
<STATUS> +</STATUS>
</POSITION_1>
<POSITION_2>
<VALUE>54.4350 </VALUE>
<STATUSVALUE>1327104</STATUSVALUE>
<STATUS> +</STATUS>
</POSITION_2>
<POSITION_3>
<VALUE>54.0800 </VALUE>
<STATUSVALUE>1327104</STATUSVALUE>
<STATUS> +</STATUS>
</POSITION_3>
</row>
</doc>
(实际上是为了POSITION_6),并希望在我使用 Power Query 执行导入并最终获得列时以 Excel 创建的相同格式返回数据帧:
DATE
MS
POSITION_1.VALUE
POSITION_1.STATUSVALUE
POSITION_1.STATUS
POSITION_2.VALUE
POSITION_2.STATUSVALUE
POSITION_2.STATUS
POSITION_3.VALUE
POSITION_3.STATUSVALUE
POSITION_3.STATUS
目前我正在使用 Pandas read_xml,我刚刚得到:
DATE MS POSITION_1 ... POSITION_4 POSITION_5 POSITION_6
0 2022-01-14 06:02:36 193 NaN ... NaN NaN NaN
1 2022-01-14 06:04:18 9 NaN ... NaN NaN NaN
2 2022-01-14 06:04:42 302 NaN ... NaN NaN NaN
3 2022-01-14 06:05:15 582 NaN ... NaN NaN NaN
4 2022-01-14 06:05:46 579 NaN ... NaN NaN NaN
因为它的读数没有低于树中的POSITION_X水平
答:
2赞
Timeless
8/31/2023
#1
除了 extra 和 IIUC,您还可以使用 elementtree 来访问详细信息:</row>
POSITION_*
import xml.etree.ElementTree as ET
data = [
dict(
{fld: row.findtext(fld) for fld in ["DATE", "MS"]},
**{f"{p.tag}.{details.tag}": details.text for p in row for details in p}
)
for row in ET.parse("file.xml").findall("row") # <- put here the actual filepath
]
df = pd.DataFrame(data)
输出:
日期 | 女士 | POSITION_1.价值 | POSITION_1.STATUS值 | POSITION_1.状态 | POSITION_2.价值 | POSITION_2.STATUS值 | POSITION_2.状态 | POSITION_3.价值 | POSITION_3.STATUSVALUE | POSITION_3.状态 |
---|---|---|---|---|---|---|---|---|---|---|
2022-01-14 06:02:36 | 193 | 53.985 | 1327104 | + | 54.305 | 1327104 | -F- + | 54.045 | 1327104 |
评论
row