我有一个像这样的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
要解决的问题是,我不知道结果标签中有多少个功能标签或元素。
我需要找到不存在的值,并用零填充。我还不能做到这一点。如何找出熊猫数据框的格式,然后找出哪些元素没有特定的功能标签?
答案 0 :(得分:1)
这似乎可以解决问题。
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
中的实际行时,大熊猫会自动用NaN填充缺失值。这些都被df.fillna('00', inplace=True)
取代。
列的名称是根据XML中的值生成的。