You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含XML的Pandas Series/DF单元格转换为多列?

解决方法

你的单元格里混杂了大量无效符号(比如|)和冗余文本,直接用ElementTree解析会因为格式不规范报错。下面是针对新手的分步实现方案,代码注释很详细:


1. 先模拟你的测试数据

先创建一个和你数据集结构一致的示例DataFrame,方便后续测试:

import pandas as pd

# 模拟每个单元格的混乱XML文本
sample_data = {
    'parameters': [
        '''parameters    
 |<data>|
     
 <parameters>|
      | <p num="1" value="0" />  |
    
   |<p num="2" value="0.0" />|
    
   |<p num="3" value="100.0" />| 
    
   |<p num="4" value="2" />|
  
   |<p/>|
     |...|
  
   ||...|
  
   |<data/>|''',
        '''parameters    
 |<data>|
     
 <parameters>|
      | <p num="1" value="5" />  |
    
   |<p num="2" value="3.5" />|
    
   |<p num="3" value="90.0" />| 
    
   |<p num="4" value="7" />|
  
   |<p/>|
     |...|
  
   ||...|
  
   |<data/>|'''
    ]
}
df = pd.DataFrame(sample_data)

2. 编写参数提取函数

这个函数会先清理脏数据,再提取有效参数:

import re

def parse_single_cell(cell_text):
    # 第一步:去掉所有多余的|符号
    cleaned_text = cell_text.replace('|', '')
    # 第二步:用正则匹配所有带num和value的<p>标签
    # 正则规则:精准匹配"<p num="数字" value="数值" />"格式的内容
    param_pattern = re.compile(r'<p num="(\d+)" value="([\d.]+)" />')
    matched_params = param_pattern.findall(cleaned_text)
    # 把匹配结果转成字典,键为参数名(比如param_1),值转为数值类型
    result_dict = {f'param_{num}': float(value) for num, value in matched_params}
    return result_dict

3. 批量处理整个DataFrame

把函数应用到parameters列的每个单元格,再将结果合并到原DataFrame:

# 对每个单元格执行提取操作,得到包含字典的Series
extracted_params = df['parameters'].apply(parse_single_cell)
# 把字典序列转成结构化的DataFrame
params_df = pd.DataFrame(extracted_params.tolist())
# 和原数据合并,得到最终结果
final_result = pd.concat([df, params_df], axis=1)

# 查看处理后的数据
print(final_result)

最终效果

处理后每个num="X"会变成单独的列(比如param_1),列值对应原value:

parameters  param_1  param_2  param_3  param_4
0  parameters    
 |<data>|
     
 <parameters>|
      | <p num="1" value="0" />  |
...        0.0      0.0    100.0      2.0
1  parameters    
 |<data>|
     
 <parameters>|
      | <p num="1" value="5" />  |
...        5.0      3.5     90.0      7.0

补充说明

你之前用ElementTree失败,是因为原始文本里有大量不符合XML规范的内容(多余符号、不完整标签),ElementTree要求严格的XML格式,所以无法直接解析。用正则提取反而更适配这种混乱的场景。

内容的提问来源于stack exchange,提问作者Snive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 06:47:35