含嵌套节点的XML解析为DataFrame时内容丢失的问题排查
XML解析为DataFrame时丢失节点文本的问题解决
问题场景
现有XML文件内容如下:
<root> <epig> string1 <tit>string2</tit> string3 </epig> </root>
使用以下代码尝试解析为DataFrame:
import pandas as pd dftext = pd.read_xml("filename.xml", xpath='root/epig')
当前输出的DataFrame仅保留了string1和string2,string3丢失:
| epig | tit |
|---|---|
| string1 | string2 |
期望输出为合并string1和string3的结果:
| epig | tit |
|---|---|
| string1+string3 | string2 |
问题原因
pd.read_xml默认解析节点内容时,若节点下包含子节点(如这里的<tit>),只会提取子节点之前的第一个文本片段,因此epig节点中tit之后的string3被忽略了。
解决办法
可以通过直接操作XML树来合并节点下的所有文本片段,再构造DataFrame:
from lxml import etree import pandas as pd # 解析XML文件 tree = etree.parse("filename.xml") root = tree.getroot() # 遍历epig节点,提取并合并文本 result = [] for epig_node in root.findall('epig'): # 提取epig下所有非空文本,清理空格后用+连接 epig_content = '+'.join([text.strip() for text in epig_node.xpath('./text()') if text.strip()]) # 提取tit节点的文本 tit_content = epig_node.find('tit').text.strip() result.append({'epig': epig_content, 'tit': tit_content}) # 转换为DataFrame df = pd.DataFrame(result)
执行后即可得到期望的DataFrame结果。
内容的提问来源于stack exchange,提问作者SubotnikOne
相关产品推荐
相关产品推荐

