python - 使用子节点解析 xml 并创建 Pandas 数据框

标签 python pandas xml-parsing

我有以下 xml 格式:

<?xml version="1.0" encoding="UTF-8"?>
<results>
   <run>
      <information>
         <logfile>s.log</logfile>
         <version>33</version>
         <mach>1</mach>
         <problemname>mm1</problemname>
         <timestamp>20201218.165122.053486</timestamp>
      </information>
      <controls>
         <item>VARS</item>
      </controls>
      <result>
         <status>4</status>
         <time>3</time>
         <obj>1.0</obj>
         <gap>0.15</gap>
      </result>
   </run>
</results>

阅读这篇文章后,我在下面有一个示例代码来解析这个文件 How to convert an XML file to nice pandas dataframe? ,但它返回无。但是,我的问题是是否有一种快速的方法来创建一个数据框,该数据框包含来自值(即 VARS)和 4 列(即状态、时间、对象和间隙)的索引。

import pandas as pd
from xml.etree import ElementTree as et

root = (et.parse('test.xml').getroot()).getchildren()


tags = {"tags":[]}
for elem in root:
    tag = {}
    tag["status"] = elem.attrib['status']
    tag["time"] = elem.attrib['time']
    tag["obj"] = elem.attrib['obj']
    tag["gap"] = elem.attrib['gap']
    tags["tags"]. append(tag)

df_users = pd.DataFrame(tags["tags"])
df_users.head()

这是我正在寻找的输出:


      status  time  obj   gap
VARS  4        3    1.0   0.15

最佳答案

我们可以使用 ElementTreefindallfind 方法来提取我们需要的元素(result 的子元素) > 作为列,controls/item 作为索引):

pd.DataFrame({x.tag: x.text for x in et.findall('./run/result//')},
             index = [et.find('./run/controls/item').text])

输出:

     status time  obj   gap
VARS      4    3  1.0  0.15

关于python - 使用子节点解析 xml 并创建 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65416727/

相关文章:

python - 返回类型取决于 Python 中的输入类型

python - Series.replace 和 Series.str.replace 有什么区别?

xml - SVG XML :space attribute issue

java - PasswordHash.java 未生成匹配的 PBKDF2-HMAC-SHA1 哈希值

python - 在 Azure Web Apps 中设置 Python 服务器

python - 比较 Pandas 中的缩写词

python - 如何计算Python数据帧的列中不同版本字符串的出现次数?

php - YOUTUBE API : Retrieve video keywords

java - org.xml.sax.SAXParseException;序言中不允许引用。自动生成XHTML,java

python - nltk:使用自定义特征集进行文本分类