【发布时间】:2019-04-26 05:43:40
【问题描述】:
我正在尝试使用 XML 创建 Pandas 数据框。 XML 如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Products>
<Info>
<Msg>Shop items.</Msg>
</Info>
<shop shopNr="01">
<ItemNr>1001</ItemNr>
<ItemNr>1002</ItemNr>
<ItemNr>1003</ItemNr>
<ItemNr>1004</ItemNr>
<ItemNr>1010</ItemNr>
</shop>
<shop shopNr="02">
<ItemNr>1002</ItemNr>
<ItemNr>1006</ItemNr>
<ItemNr>1005</ItemNr>
</shop>
<shop shopNr="03">
<ItemNr>1009</ItemNr>
<ItemNr>1006</ItemNr>
<ItemNr>1005</ItemNr>
<ItemNr>1002</ItemNr>
</shop>
</Products>
我尝试使用 XML Etree 作为下面的代码。我有两个问题。
首先,我无法将 ItemNr 的值作为根的子项。而不是获得价值,即。 1001,我明白了
<Element 'ItemNr' at 0x000001E2D6C41B38>.
第二个问题是当我从列表中创建数据框时。我最终有一个项目列表列表。虽然由于我无法获得上述值,所以现在结果为空,但我希望得到一个扁平列表。
import xml.etree.ElementTree as ET
import pandas as pd
data = 'example_shops.xml'
tree = ET.parse(data)
root = tree.getroot()
shops = []
items = []
for node in root.iter('shop'):
shops.append(node.attrib.get('shopNr'))
items.append(list(node))
d = {'shops': shops, 'items': items}
df = pd.DataFrame(d)
生成的 DataFrame。
shops items
0 01 [[], [], [], [], []]
1 02 [[], [], []]
2 03 [[], [], [], []]
想要的输出是:
shops items
0 01 [1001, 1002, 1003, 1004, 1010]
1 02 [1002, 1006, 1005]
2 03 [1009, 1006, 1005, 1002]
【问题讨论】: