XML转换为dataframe

xml文档

<?xml version="1.0"?>
<data>
    <customer name="小明" >
        <email>xm@gmail.com</email>
        <phone>555-1234</phone>
    </customer>
    <customer name="小王" >
        <email>xw@gmail.com</email>
    </customer>    
    <customer name="小爱" >
        <email>xa@gmail.com</email>
        <phone>555-4567</phone>
    </customer>  
    <customer name="大卫" >
        <phone>555-6472</phone>
        <address>
            <street>Fifth Avenue</street>
        </address>
    </customer>      
</data>

read and parse XMLfile

import xml.etree.cElementTree as et
parsedXML = et.parse('demo.xml')

node.attrib.get(),获取标签内部,k-v对应的键值

node.find()找到对应的子标签,(node.find(‘xxx’)).text:返回对应的内容

for node in parsedXML.getroot():
    name = node.attrib.get('name')
    email = node.find('email')
    phone = node.find('phone')
    street = node.find('address/street')

Full script

import xml.etree.cElementTree as et
import pandas as pd

def getvalueofnode(node):
    """ return node text or None """
    return node.text if node is not None else None


def main():
    """ main """
    parsed_xml = et.parse("demo.xml")
    dfcols = ['name', 'email', 'phone', 'street']
    df_xml = pd.DataFrame(columns=dfcols)

    for node in parsed_xml.getroot():
        name = node.attrib.get('name')
        email = node.find('email')
        phone = node.find('phone')
        street = node.find('address/street')

        df_xml = df_xml.append(
            pd.Series([name, getvalueofnode(email), getvalueofnode(phone),
                       getvalueofnode(street)], index=dfcols),
            ignore_index=True)

    print (df_xml)
main()
  name         email     phone        street
0   小明  xw@gmail.com  555-1234          None
1   小王  xw@gmail.com      None          None
2   小爱  xa@gmail.com  555-4567          None
3   大卫          None  555-6472  Fifth Avenue
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值