我有下面的xml文件:
<pdv_liste>
<pdv id="10" latitude="46" longitude="52" cp="01000" pop="R">
<city>LA</city>
<price name="diesel" id="1" maj="2017-01-02T09:37:03" value="1258"/>
<price name="diesel" id="1" maj="2017-01-03T09:54:58" value="1258"/>
<price name="diesel" id="1" maj="2017-01-06T12:33:57" value="1258"/>
<price name="diesel" id="1" maj="2017-01-09T08:59:53" value="1258"/>
<price name="diesel" id="1" maj="2017-01-10T10:38:39" value="1258"/>
</pdv>
<pdv id="2" latitude="46" longitude="53" cp="01000" pop="R">
<city>NY</city>
<price name="diesel" id="1" maj="2017-01-03T09:38:59" value="1258"/>
<price name="diesel" id="1" maj="2017-01-06T11:19:09" value="1258"/>
</pdv>
</pdv_liste>
我想获得以下 Dataframe :
id latitude longitude city name maj value
10 46 52 LA diesel 2017-01-02T09:37:03 1258
10 46 52 LA diesel 2017-01-03T09:54:58 1258
10 46 52 LA diesel 2017-01-06T12:33:57 1258
10 46 52 LA diesel 2017-01-09T08:59:53 1258
10 46 52 LA diesel 2017-01-10T10:38:39 1258
2 46 53 NY diesel 2017-01-03T09:38:59 1258
2 46 53 NY diesel 2017-01-06T11:19:09 1258
我尝试了以下代码:
df = pd.read_xml("myfile.xml", xpath="//price")
但是我得到了以下我不想要的数据框:
name id maj value
diesel 1 2017-01-02T09:37:03 1258
diesel 1 2017-01-03T09:54:58 1258
diesel 1 2017-01-06T12:33:57 1258
diesel 1 2017-01-09T08:59:53 1258
diesel 1 2017-01-10T10:38:39 1258
diesel 1 2017-01-03T09:38:59 1258
diesel 1 2017-01-06T11:19:09 1258
有多个pdv。我应该如何更改代码?
2条答案
按热度按时间djp7away1#
以下是lxml的一个选项:
输出:
如果您想使用excel来解析/保存电子表格,以便使用
read_excel
:打开新工作簿,选择
Open/Browse/myfile.xml
,然后单击OK
:之后,使用另一个
OK
确认,以便Excel尝试推断模式:最后,将创建一个新的电子表格/表格:
q1qsirdb2#
pandas文档:
对于更复杂的XML文档,样式表允许您暂时用XSLT(一种特殊用途语言)重新设计原始文档,以获得更扁平的版本,从而迁移到DataFrame。
因此,解决方案之一是使用xslt转换样式表对xml进行反规范化。这里的代码如何使用它与Pandas:
结果我得到: