嗨,我可以将我的xml文件转换为熊猫数据框。但我面临的挑战是我没有在正确的行中获取记录,可以说我们在xml中有一组标记,例如它正在重复使用。 4倍,它有多个子节点应该是我的数据框的列,现在当我想读取XML我想要只在我的熊猫数据框中只有4行,但我得到太多与NaN行,因为所有其他标签躺在不同的水平上。python中的XML解析熊猫在一行中获取完整的标记块
编辑:刚才弄清楚了XML数据的描述/差异。提到的一个是最终编辑的XML数据 只需找出我的XML数据的一些问题...更新了正确和最终的XML内容。
Same <ns1:parenttag> is getting repeated over a xml file multiple times
<?xml version="1.0" encoding="UTF-8"?>
<row:user-agents xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:row="http://www.row.com"
xmlns:ns1="http://www.ns1.com"
xmlns:ns2="http://www.ns2.com"
xmlns:ns3="http://www.ns3.com"
xmlns:row1="http://www.row1.com"
xmlns:row3="http://www.row3.com"
xmlns:row2="http://www.row2.com"
xsi:schemaLocation="http://www.schemaLocation-1.4.xsd">
<row:agent1>
<row:test>
<row2:test1>
<row2:test2>
<row2:test3>9999</row2:test3>
<row2:test4>aa</row2:test4>
<row2:test5>1</row2:test5>
</row2:test2>
</row2:test1>
<row2:test6>2017</row2:test6>
</row:test>
<row:agent2>
<row3:agent3>
<ns1:parenttag>
<ns1:childtag1>
<ns1:subchildtag1>
<ns1:indenticaltag>123</ns1:indenticaltag>
</ns1:subchildtag1>
</ns1:childtag1>
<ns1:indenticaltag>456</ns1:indenticaltag>
<ns1:childtag2>N</ns1:childtag2>
<ns1:childtag3>0</ns1:childtag3>
<ns1:childtag4>N</ns1:childtag4>
<ns1:childtag5>
<ns2:subchildtag2 attributname="abc">
<ns2:sub_subchildtag1>12 45</ns2:sub_subchildtag1>
</ns2:subchildtag2>
</ns1:childtag5>
<ns1:childtag6>tyu</ns1:childtag6>
<ns1:childtag7>2</ns1:childtag7>
<ns1:childtag8> poiu</ns1:childtag8>
<ns1:childtag9>
<ns3:subchildtag3>345</ns3:subchildtag3>
<ns3:subchildtag6>567</ns3:subchildtag6>
</ns1:childtag9>
<ns1:childtag10>N</ns1:childtag10>
<ns1:childtag11>
<ns3:subchildtag4>34</ns3:subchildtag4>
<ns3:subchildtag5>abc/123</ns3:subchildtag5>
</ns1:childtag11>
<ns1:childtag12>
<ns1:indenticaltag>234</ns1:indenticaltag>
</ns1:childtag12>
</ns1:parenttag>
</row3:agent3>
</row:agent2>
</row:agent1>
</row:user-agents>
另一个XML这是父标签的期限有所不同:
<ns1:parenttag>
<ns1:indenticaltag>123</ns1:indenticaltag>
<ns1:childtag2>N</ns1:childtag2>
<ns1:childtag3>0</ns1:childtag3>
<ns1:childtag4>N</ns1:childtag4>
<ns1:childtag5>
<ns2:subchildtag1 attributename0="poi">
<ns2:sub_subchildtag1>
<ns2:sub_sub_subchildtag1>
<ns2:sub_sub_sub_subchildtag1 attributename1="3" attributename2="17">1234</ns2:sub_sub_sub_subchildtag1>
</ns2:sub_sub_subchildtag1>
</ns2:sub_subchildtag1>
</ns2:subchildtag1>
</ns1:childtag5>
<ns1:childtag6>12</ns1:childtag6>
<ns1:childtag7> qwer</ns1:childtag7>
<ns1:childtag8>
<ns3:subchildtag2>456</ns3:subchildtag2>
</ns1:childtag8>
<ns1:childtag9>N</ns1:childtag9>
<ns1:childtag10>
<ns3:subchildtag3>908</ns3:subchildtag3>
<ns3:subchildtag4>abc/123</ns3:subchildtag4>
</ns1:childtag10>
</ns1:parenttag>
我使用的是目前在下面的答案被芭菲提示功能: 但得到这个错误:
i am getting ValueError: Length mismatch: Expected axis has 21 elements, new values have 22 elements erros
Also it has issue with indenticaltag column as its of same name thrice but hierarchy is different
but in dataframe i am getting only one indenticaltag column instead of 3 for example:
parent.child.indenticaltag, parent.child.subchild.indenticaltag and parent.child.subchild.sub_subchild.indenticaltag etc.
输出数据帧为:
I will parse both xmls differently using one function only.
Would like to parse all the tags and their attribute as column name in
pandas. Also the column name should be
parent.child.subchild.sub_sub_subchildtag and for attributes it should
be parent.child.subchild.sub_sub_childtag.attribute
他们是否有更好的方法来解析XML并以适当的格式获取记录?或者我错过了什么?
编辑:解决方案的工作,但增加了一些更复杂
I need your help for three points if you guys can suggest some pointers:
1) I need columns name for pandas dataframe as root.child.subchild.grandchild i am not sure how i can get it here ? as in my solution i was able to get.
2) the descendant function is very slow is any way we can speed it up ?
3) i have to multiple xml of same type present in one directory and i would like to generate one dataframe out of it by appending all xml results any best way to do ?
远远胜过我,非常感谢!一个问题,如果我们有高等级的儿童在等级制中?是否有任何标准的方法来遍历所有的子小孩? – user07
好问题,请参阅使用XPath的'descendant :: *'更新扩展,其中通过其节点索引遍历每个''并解析其所有后代。 –
Parfait
你的XML有多大?超过1 GB? *你的速度有多慢?而且,属性和文本是非常不同的。您的示例XML不包含属性或试图解析它们。始终发布**实际**数据的真实示例。 – Parfait