如何解决Python使用缺少的元素将XML解析为DataFrame
我想解析一个xml文件,但是缺少一些员工的某些元素。在下面的示例中,并非所有员工都有就业数据。
这是一个示例文件:
<Employees
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.portalvs.sk/regzam/employees.xsd"
generated="2020-09-14">
<Employee Id="87912190">
<GivenName>John</GivenName>
<FamilyName>Test1</FamilyName>
</Employee>
<Employee Id="40286072">
<GivenName>Josh</GivenName>
<FamilyName>Test2</FamilyName>
</Employee>
<Employee Id="79273304">
<GivenName>Mark</GivenName>
<FamilyName>Test3</FamilyName>
</Employee>
<Employee Id="62028843">
<GivenName>Cath</GivenName>
<FamilyName>Test4</FamilyName>
<Employment>
<Workplace Code="995000000">
<University Code="995000000">UniversityTest</University>
</Workplace>
<BeginDate>2013-11-01</BeginDate>
</Employment>
</Employee>
<Employee Id="24030368">
<GivenName>Becky</GivenName>
<FamilyName>Test5</FamilyName>
<Employment>
<Workplace Code="998000000">
<University Code="998000000">UniversityTest2</University>
</Workplace>
<BeginDate>2008-09-01</BeginDate>
</Employment>
</Employee>
</Employees>
我想用employee_id,employee_first_name,employee_last_name,University_code和begin_date创建一个DataFrame。对于那些没有就业数据的员工,我希望他们缺少大学价值观。
employee_id employee_first_name employee_last_name university_code begin_date
87912190 John Test1 NaN NaN
40286072 Josh Test2 NaN NaN
79273304 Mark Test3 NaN NaN
62028843 Cath Test4 995000000 2013-11-01
24030368 Becky Test5 998000000 2008-09-01
感谢您的帮助,因为我是Python的新手,也是xml解析的新手。
解决方法
您可以使用beautifulsoup
来解析XML。其他选项例如为lxml
。
如果txt
包含您的XML代码段,则此代码:
from bs4 import BeautifulSoup
soup = BeautifulSoup(txt,'html.parser')
all_data = []
for e in soup.select('employee'):
all_data.append({
'employee_id': e['id'],'employee_first_name': e.givenname.text,'employee_last_name': e.familyname.text,'university_code': e.university['code'] if e.university else None,'begin_date': e.begindate.text if e.begindate else None
})
df = pd.DataFrame(all_data)
print(df)
创建此数据框:
employee_id employee_first_name employee_last_name university_code begin_date
0 87912190 John Test1 None None
1 40286072 Josh Test2 None None
2 79273304 Mark Test3 None None
3 62028843 Cath Test4 995000000 2013-11-01
4 24030368 Becky Test5 998000000 2008-09-01
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。