Pandas将前导零添加到具有负值和正值的列

dgenwo3n  于 2023-09-29  发布在  其他
关注(0)|答案(3)|浏览(81)

我想为一列中的所有行添加一个前导零。下面是该列的外观:
| 值|
| --|
| -1个|
| 9 |
| 10 |
| -2|
所需输出:
| 值|
| --|
| -01|
| 09 |
| 10 |
| -02|
我尝试使用zfill,但它不照顾负值。

df['value'] = df['value'].astype(str).str.zfill(2)
dxxyhpgq

dxxyhpgq1#

请尝试以下操作:

import pandas as pd
    
    data = {'value': [-1, 9, 10, -2]}
    df = pd.DataFrame(data)
    
    # Function to add leading zero
    def custom_zfill(x):
        if x < 0:
            return '-' + str(abs(x)).zfill(2)
        else:
            return str(x).zfill(2)
    
    df['value'] = df['value'].apply(custom_zfill)
    print(df)

d4so4syb

d4so4syb2#

使用特定的正则表达式替换:

df['value'].astype(str).str.replace(r'^(-)?(\d)$', r'\g<1>0\2', regex=True)
  • (-)?-与可选前导字符-匹配的第一个捕获组
  • (\d)$-第二个捕获的组,以匹配结尾处的单个数字$
0    -01
1     09
2     10
3    -02
Name: value, dtype: object
zed5wv10

zed5wv103#

对于一个通用的方法,你可以先计算O * s * 的数量来填充(通过使用len/max),然后抓取sign,最后使用 f-strings 来形成一个字符串:

s = df["value"].astype(str).str.strip("-")
M = s.str.len().max() # maximum number of digits

df["value"] = [
    f"{str(s).rstrip('1')}{v.zfill(M)}" for s, v in zip(np.sign(df["value"]), s)
]

输出量:

print(df)

  value
0   -01
1    09
2    10
3   -02

相关问题