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

如何用Pandas为包含正负值的列添加前导零?

给DataFrame列添加前导零(含负值)的解决办法

问题场景

原始value列数据:

value
-1
9
10
-2

期望处理后得到:

value
-01
09
10
-02

你尝试的zfill(2)之所以失效,是因为它会把负号计入总长度,导致负数的数字部分只能占1位,无法补零。

可行解决方案

方法1:拆分符号与数字拼接

先分离正负符号和绝对值,给绝对值补零后再拼接回去:

import pandas as pd

df = pd.DataFrame({'value': [-1, 9, 10, -2]})

# 提取符号(负数留'-',正数留空)
df['sign'] = df['value'].map(lambda x: '-' if x < 0 else '')
# 对绝对值补前导零到2位
df['num'] = df['value'].abs().astype(str).str.zfill(2)
# 合并符号和补零后的数字
df['value'] = df['sign'] + df['num']
# 清理中间列(可选)
df = df.drop(['sign', 'num'], axis=1)

方法2:格式化字符串(最简洁)

利用Python的格式化语法,直接对正负值分别处理:

df['value'] = df['value'].apply(lambda x: f'-{abs(x):02d}' if x < 0 else f'{x:02d}')

这里{:02d}表示将数字格式化为2位,不足补前导零;负数先取绝对值格式化,再补上负号。

方法3:正则表达式替换

用正则匹配数字部分,单独给数字补零:

df['value'] = df['value'].astype(str).str.replace(r'(-?)(\d+)', lambda match: match.group(1) + match.group(2).zfill(2))

正则(-?)(\d+)会捕获可选的负号和后面的数字,再对数字部分执行zfill补零。

以上三种方法都能得到你想要的输出,其中方法2代码最简洁,适合快速处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:58:17