python - 将xml数据转换为数据框
问题描述
假设我有一个这样的 XML:
<Rules>
<Set Parameter="4" To="90">
<If Parameter="1087" EqualsTo="90" />
</Set>
<Set Parameter="5" To="-5">
<If Parameter="1087" EqualsTo="87" />
</Set>
<Set Parameter="6" To="[-5,23;36,7;58,7;78,8;94,47]">
<If Parameter="1087" EqualsTo="87" />
</Set>
<Set Parameter="14" To="7,5" />
<Set Parameter="15" To="-7,5" />
<Set Parameter="16" To="0,5" />
<Set Parameter="17" To="3" />
<Set Parameter="18" To="-3" />
<If Parameter="1087" EqualsTo="87" />
</Set>
</Rules>
我想阅读这个 XML 文件并将其转换为 pandas DataFrame:
Parameter<Set> Parameter<If>
4 1087
5 1087
6 1087
14 1087
15 1087
16 1087
17 1087
18 1087
这是我已经尝试过的,但是我遇到了一些错误,并且可能有一种更有效的方法来完成此任务:
import xml.etree.ElementTree as ET
import pandas as pd
import os
def getMetrics(file_name):
path="C:\\Users\Z003Z9CF\Downloads"
os.chdir(path)
tree = ET.parse('sample1.xml')
print(tree)
root = tree.getroot()
print(root.tag)
result = []
for setnode in root.iter('Set'):
node = setnode.attrib["Parameter"]
for ifnode in setnode:
if "Parameter" in ifnode.attrib:
result.append(dict(node=node, parameter=ifnode.attrib.get("Parameter")))
return result
df = pd.DataFrame(getMetrics('sample1.xml'), columns["Parameter","Parameter"])
print(df)
解决方案
首先你调用方法和函数返回是错误的。您定义了只接受一个参数并发送两个参数的函数。根据您xml
的还显示输出也是错误的。
输出应根据您的xml
:
4 1087
5 1087
6 1087
18 1087
在这里,我在本地设置上调试并纠正了您的功能错误,该设置运行良好。
import xml.etree.ElementTree as ET
import pandas as pd
def getMetrics(file_name):
tree = ET.parse(file_name)
root = tree.getroot()
result = []
for setnode in root.iter('Set'):
node = setnode.attrib["Parameter"]
for ifnode in setnode:
if "Parameter" in ifnode.attrib:
result.append(dict(node=node, parameter=ifnode.attrib.get("Parameter")))
return result
df = pd.DataFrame(getMetrics('sample.xml'))
print(df)
您的xml
文件应如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Rules>
<Set Parameter="4" To="90">
<If Parameter="1087" EqualsTo="90" />
</Set>
<Set Parameter="5" To="-5">
<If Parameter="1087" EqualsTo="87" />
</Set>
<Set Parameter="6" To="[-5,23;36,7;58,7;78,8;94,47]">
<If Parameter="1087" EqualsTo="87" />
</Set>
<Set Parameter="14" To="7,5" />
<Set Parameter="15" To="-7,5" />
<Set Parameter="16" To="0,5" />
<Set Parameter="17" To="3" />
<Set Parameter="18" To="-3" >
<If Parameter="1087" EqualsTo="87" />
</Set>
</Rules>
推荐阅读
- python - 在给定值条件的情况下获取 np 外积因子的索引
- reactjs - 将 reducer 扩展到数据略有不同的不同页面
- google-play - Google Play - “问题:内容分级不正确”
- python - 如何修复“从应用程序收到的不完整响应”
- javascript - 如何将多个值推送到表单中?
- python-3.x - 使用python提取pdf表格中包含的文本的最佳方法是什么?
- git - 将单个跟踪文件添加到 .gitignore 而不删除它?
- office-js - Excel 上下文可以安全地传递给一个类吗?
- swift - Swift Array(bufferPointer) EXC_BAD_ACCESS 崩溃
- php - 所有参数都已绑定但我得到“无效的参数编号:绑定变量的数量与令牌的数量不匹配”