使用Pandas read_xml读取XML时Amt列仅识别列名不取值如何解决?
问题原因
Amt属于自闭合标签,取值全部存储在标签的val、curr属性中,pd.read_xml()默认仅提取标签包裹的文本内容,不会主动读取标签属性值,因此你只能识别到Amt列名,无法拿到对应取值。
解决方法
方法1:分两次读取后合并
分别读取普通标签的文本值和Amt的属性值,再合并为同一个DataFrame:
# 读取原有可正常解析的Type、Activation字段 df_base = pd.read_xml(xml_data) # 单独读取Amt标签的属性值 df_amt = pd.read_xml(xml_data, xpath="//Amt", attrs_only=True) # 合并两个结果 xml_df = pd.concat([df_base, df_amt], axis=1)
如果需要调整属性的列名,可直接重命名:
xml_df = xml_df.rename(columns={"val": "Amt数值", "curr": "Amt货币类型"})
方法2:一次性读取所有内容
通过配置参数同时提取标签文本和属性,一步得到结果:
xml_df = pd.read_xml( xml_data, elems_only=False, attrs_only=False )
注意说明
- 如果XML存在多层嵌套,仅需调整
xpath参数定位到目标节点的对应层级即可 - 自闭合标签本身无文本内容,原有Amt列的空值属于正常现象,所有有效信息都在提取出的属性列中
内容的提问来源于stack exchange,提问作者Dales91
相关产品推荐
相关产品推荐

