【发布时间】:2021-06-01 19:06:23
【问题描述】:
我必须在 Python 中进行的开发包括获取一个带有从 sig 构建的树的 xml 文件。形状:
xml文件示例:I put here xml file becuase of big it is
上图中绿色的最后一个标签(Signal)是我必须从中提取Name和Value属性的值;这可以在这些属性中使用不同的值在同一级别重复两次或更多次。
读取 xml 的函数如下:
import xml.etree.ElementTree as ET
import pandas as pd
file_xml = ET.parse('ejemplo.xml')
print("File: ", rootXML)
rootXML= file_xml.getroot()
def fragmentXML(rootXML):
for child1 in root:
for child2 in child1:
for child3 in child2:
for child4 in child3:
for child5 in child4:
for child6 in child5:
for child7 in child6:
levelChild7(child7)
transformData(values)
当使用 Pandas 获取数据时,将其放入数据框并对数据进行分组,我将它们一个一个分组,而不是一次全部分组;这是我用来对它们进行分组并使用 Matplotlib 将它们绘制在图表中的函数:
def transformData(data_final):
df_dataXML.groupby('Name')['Name'].count().plot(kind='bar')
plot.show()
这是最后一个函数的控制台结果,它给我带来了单独的所有数据,显然还有图表:
问题是我不知道是否有任何方法可以加入 Signal 的属性(名称和值)以将它们传递给 Dataframe 中的 Pandas,我将所有内容与名称和值一起绘制在图表。而且我没有像上一张图片那样分别绘制每个名称和值。
我尝试过使用列表、元组和字典,但我无法将这些值合并,就好像标签是一个单独的实体,因此它是单独绘制的。
接下来我通过更改 levelChild7 和 transformData 函数与列表共享失败的尝试:
def levelChild7(child):
nameSignal = []
valueSignal = []
if child7.tag == 'chid7_e':
for child8 in child7:
for child9 in child8:
print(child9.tag)
elif child7.tag == 'chid7_f':
for child8 in child7:
for child9 in child8:
print(child9.tag)
elif child7.tag == 'chid7_p':
for child8 in child7:
for child9 in child8:
print(child9.tag)
else:
for child8 in child7:
nameSignal.append(Signal.attrib['Name'])
prevValueSignal = Signal.attrib['Value']
splitValueSignal = prevValueSignal.split(' ')
valueSignal1st = splitValueSignal[0]
valueSignal.append(int(valueSignal1st))
values = nameSignal+valueSignal
#print(values)
transformData(values)
def transformData(data_final):
df_dataXML = pd.DataFrame(data_final)
print(df_dataXML)
结果如下,这是我无法找到如何分组的名称和值属性,因为它们由行和它在 XML 文档中找到的每个标记分隔:
谁能指导我知道如何重新组合Name和Values的值并将它们放在单个变量中?或者告诉我我的代码中缺少什么? 提前致谢。
【问题讨论】:
-
请在minimal reproducible example 而不是screenshot 的帖子正文中发布XML 示例。
-
完成@Parfait 编辑我的问题并放一个 xml 示例。谢谢。
标签: python pandas xml dataframe matplotlib