【发布时间】:2017-08-21 19:11:56
【问题描述】:
这个问题是关于解析具有以下结构的不一致 XML
<items>
<item>
<propertyA>1</propertyA>
<propertyB>B</propertyB>
<propertyC>2017</propertyC>
</item>
<item>
<propertyB>BB</propertyB>
<propertyD>D-2017</propertyD>
</item>
<item>
<propertyE>E</propertyE>
<propertyF>11:25</propertyF>
</item>
</items>
我希望每个项目成为数据框中的记录。最终数据框应具有所有属性 A、B、C、D、E、F,并且记录应具有 NaN 或其他属性,以防它们没有这些值。
我现在的做法是
def load_inconsistent_xml(xml):
root = ET.fromstring(xml)
frames = []
df = pd.DataFrame()
for child in root.iter('item'):
record = []
headers = []
for subchild in child:
headers.append(subchild.tag)
record.append(subchild.text)
s2 = pd.Series(record, index=headers)
df = df.append(s2, ignore_index=true)
if not df.empty:
df.columns = df.columns.str.lower()
return df
您肯定可以看到,我通过将新的 pd.Series 附加到数据框来做到这一点。这种方法似乎是防弹的(至少对我来说:D),而且我的数据是一致的。
问题是,100k 个项目的效率非常低,需要很长时间。 你会推荐什么?
感谢您花时间回答我的问题。我是 python 新手,感谢您的耐心等待。
【问题讨论】:
标签: python xml pandas xml-parsing