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

Pandas如何为DataFrame列内字典的数值追加%符号

Pandas字典列批量给数值加百分号实现方案

问题复现

初始测试DataFrame结构:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'key': [1, 2, 3, 4, 5],
    'values_list': [
        {'ABC': 100},
        {'DEF': 100},
        {'ASE': 95, 'ABC': 5},
        {'ABC': 55, 'ASE': 40, 'DEF': 5},
        {'DEF': 90, 'ABC': 5, 'ASE': 2.5, 'XYZ': 2.5}
    ]
})

目标:将values_list列中每个字典的数值转为字符串,末尾添加%符号,最终效果如下:

key, values_list
 1, {'ABC':100%}
 2, {'DEF':100%}
 3, {'ASE':95%,'ABC':5%}
 4, {'ABC':55%,'ASE':40%,'DEF':5%}
 5, {'DEF':90%,'ABC':5%,'ASE':2.5%,'XYZ':2.5%} 

原有方法错误原因

  • 方法1:df['values_list'].str.replace(r'[0-9]+', '[0-9]%')
    1. .str是pandas针对字符串类型列的访问器,当前values_list列存储的是字典对象,不是字符串,正则匹配逻辑根本不会生效;
    2. 替换值写为'[0-9]%'是固定字面量,就算列是字符串类型,也会把所有匹配到的数字替换成[0-9]%文本,不会保留原有数值。
  • 方法2:np.where(df['values_list'].str.isdigit(),df['values_list']+'%',df['values_list'])
    1. 同样错误地对字典列使用.str字符串方法,str.isdigit()会判断整个单元格内容是否为纯数字,字典对象调用该方法会全部返回False,永远不会走拼接%的逻辑分支。

正确实现代码

不要用字符串正则硬改字典结构,直接遍历字典重构键值对,天然兼容整数、浮点数两种数值类型:

# 核心逻辑:遍历每个字典,重新生成值带%的新字典
df['values_list'] = df['values_list'].apply(
    lambda item: {k: f"{v}%" for k, v in item.items()}
)

如果需要输出的字典和示例展示完全一致(没有字符串引号),可以转字符串后去掉单引号:

df['values_list'] = df['values_list'].apply(
    lambda item: str({k: f"{v}%" for k, v in item.items()}).replace("'", "")
)

执行后打印结果完全符合预期:

key                             values_list
0    1                              {ABC:100%}
1    2                              {DEF:100%}
2    3                       {ASE:95%,ABC:5%}
3    4              {ABC:55%,ASE:40%,DEF:5%}
4    5    {DEF:90%,ABC:5%,ASE:2.5%,XYZ:2.5%}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:54:14