Python用Pandas提取XML指定字段生成DataFrame报错如何解决?
报错原因
你遇到的报错是因为代码遍历了XML中所有层级的节点,包括<Structure>、<Field>这类不包含GAMEREF等目标字段的节点,当对这类节点调用find('GAMEREF')时会返回None,访问None的text属性就触发了AttributeError。
修改后可运行代码
import pandas as pd import xml.etree.ElementTree as et xtree = et.parse("gamedata.xml") xroot = xtree.getroot() df_cols = ["GAME REF","YEAR", "GAME NO", "WIN LOSS"] rows = [] # 仅遍历Record节点,过滤所有无关节点 for record in xroot.iter('Record'): # 用findtext获取文本,不存在时自动返回None,避免报错 s_gameref = record.findtext('GAMEREF') s_year = record.findtext('YEAR') s_game_no = record.findtext('GAMENO') s_winloss = record.findtext('WINLOSS') rows.append({ "GAME REF": s_gameref, "YEAR": s_year, "GAME NO": s_game_no, "WIN LOSS": s_winloss }) df = pd.DataFrame(rows, columns = df_cols) # 按需开启类型转换,将对应字段转为数值型 # df = df.astype({"GAME REF": int, "YEAR": int, "GAME NO": int})
核心改动说明
- 调整遍历范围,只处理
<Record>节点,从根源避免查找不存在的标签 - 替换取值方法为
findtext(),自动处理字段缺失的场景,不会抛出属性不存在异常 - 移除原代码赋值语句末尾多余的逗号,避免字段值被错误封装为元组类型
内容的提问来源于stack exchange,提问作者DomCobb
相关产品推荐
相关产品推荐

