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

如何拼接替换pandas DataFrame列中的特定词汇与对应值

Pandas JSON列转指定格式实现方案

实现逻辑

  • 优先用json库解析列内的标准JSON字符串,比硬切片字符串兼容性更强,不会因为JSON格式小变动报错
  • 提取deltaImp字段的横杠分隔字符串,拆分每个分段为小数点前后两部分,分别对应name和value
  • 按目标格式要求拼接字符串,注意原字段名是驼峰deltaImp,输出要求全小写deltaimp
  • 用pandas的apply方法批量处理整列,比手动写嵌套循环效率更高、代码更易维护

完整代码

import pandas as pd
import json

# 测试数据,和提供的原始样例一致
df = pd.DataFrame({
    'column_name_1': [
        '{"deltaImp":"10.3-13.1-14.1-15.1"}',
        '{"deltaImp":"10.3-13.2-14.1-15.1"}'
    ]
})

def convert_row(json_str: str) -> str:
    # 解析原始JSON
    raw_data = json.loads(json_str)
    delta_segs = raw_data['deltaImp'].split('-')
    # 组装每个name-value片段
    items = []
    for seg in delta_segs:
        name_part, val_part = seg.split('.')
        # 如果需要匹配给出的样例里value=2的结果,把下面的int(val_part)改成int(val_part)-1即可
        items.append(f"{{name={int(name_part)}, value={int(val_part)}}}")
    # 拼接为最终目标结构
    return f"{{deltaimp=[{', '.join(items)}]}}"

# 批量转换整列
df['column_name_1'] = df['column_name_1'].apply(convert_row)

结果验证

执行代码后打印df['column_name_1'],输出为:

0    {deltaimp=[{name=10, value=3}, {name=13, value=1}, {name=14, value=1}, {name=15, value=1}]}
1    {deltaimp=[{name=10, value=3}, {name=13, value=2}, {name=14, value=1}, {name=15, value=1}]}

调整value计算逻辑(减1)后,输出将和给出的目标样例完全一致。

原有代码问题说明

  • 不要使用list作为变量名,会覆盖Python内置的list类型,容易引发后续不可预期的报错
  • 嵌套遍历Series和字典的写法性能差,apply是pandas内置的逐行处理方案,代码更简洁运行更快
  • 拆分得到嵌套列表后,直接用f-string格式化就能快速添加name=、value=标识,不需要额外做复杂的结构嵌套

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:12:30