python - 如何将此非统一 XML 文件转换为 Pandas 数据框
问题描述
我有一个这样的 XML 文件
<TestingValue>
<result>
<attr1>Attribute1</attr1>
<attr2>Attribute2</attr2>
<feature>
<a>a2</a>
<b>b2</b>
<c>c2</c>
<d>d3</d>
</feature>
<feature>
<a>a1</a>
<b>b2</b>
<d>d3</d>
</feature>
<feature>
<b>b2</b>
<c>c2</c>
<d>d3</d>
</feature>
<feature>
<a>a1</a>
<b>b2</b>
</feature>
<feature>
<a>a1</a>
<d>d3</d>
</feature>
</result>
</TestingValue>
我需要像这样创建一个熊猫数据框。
Attr1 Attr2 a b c d
Attribute 1 Attribute2 a2 b2 c2 d2
Attribute 1 Attribute2 a1 b2 00 d3
Attribute 1 Attribute2 00 b2 c2 d3
Attribute 1 Attribute2 a1 b2 00 00
Attribute 1 Attribute2 a1 00 00 d3
为了增加这个问题,我不知道结果标签中有多少特征标签或元素。
我需要找出哪些值不存在并用零填充它们。我还不能这样做。如何找出 pandas 数据框的格式,然后找出哪些元素没有特定的特征标签?
解决方案
这似乎可以解决问题。
import pandas as pd
import xml.etree.ElementTree as et
def xml_to_df(filename):
rows = []
attributes = {}
xtree = et.parse("data.xml")
xroot = xtree.getroot()
result = xroot.find("result")
for feature_or_attr in result:
if feature_or_attr.tag == "feature":
rows.append({node.tag: node.text for node in feature_or_attr})
else:
attributes[feature_or_attr.tag] = feature_or_attr.text
df = pd.DataFrame(rows)
df.fillna('00', inplace=True)
for key, val in attributes.items():
df[key] = val
return df
print(xml_to_df("data.xml"))
输出:
a b c d attr1 attr2
0 a2 b2 c2 d3 Attribute1 Attribute2
1 a1 b2 00 d3 Attribute1 Attribute2
2 00 b2 c2 d3 Attribute1 Attribute2
3 a1 b2 00 00 Attribute1 Attribute2
4 a1 00 00 d3 Attribute1 Attribute2
为了解决您关于不知道哪些值为 null 的观点——pandas 不在乎。在我构建每个row
时,我只定义了尽可能多的功能。当每个row
对象变成 中的实际行时DataFrame
,pandas 会自动用 NaN 填充缺失值。这些都替换为df.fillna('00', inplace=True)
.
列的名称是根据 XML 中的值生成的。
推荐阅读
- google-sheets - 将数组公式应用于 sumifs
- laravel - laravel 中的验证和重复更新()
- kubernetes - Kubernetes HA 主设置
- python - capture group via regex and then split capture groups into separate list items
- python - Why is a global dictionary accessible inside a class whereas a global integer variable is not?
- javascript - forEach 方法不适用于字符串(字符数组)
- java - java - 如何在java中的int变量中采用空格分隔的整数输入?
- android - Flutter Android 启动器图标看起来很小
- java - 需要帮助延迟 javafx 应用程序
- assembly - 我对这个算术运算符感到困惑