如何拼接替换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
相关产品推荐
相关产品推荐

