填充函数(Python)string.zfill

Ton*_*one 0 python etl pandas

我想更改下面的Python函数,以涵盖我的business_code需要填充的所有情况.该string.zfill直到达到给定的宽度,但我从来没有使用过它的Python函数处理此异常,填充到左边.

 #function for formating business codes
def formatBusinessCodes(code):
    """ Function that formats business codes.  Pass in a business code which will convert to a string with 6 digits """
    busCode=str(code)
    if len(busCode)==1:
        busCode='00000'+busCode
    elif len(busCode)==2:
        busCode='0000'+busCode
    else:
        if len(busCode)==3:
            busCode='000'+busCode
    return busCode

#pad extra zeros 
df2['business_code']=df2['business_code'].apply(lambda x: formatBusinessCodes(x))
businessframe['business_code']=businessframe['business_code'].apply(lambda x: formatBusinessCodes(x))
financialframe['business_code']=financialframe['business_code'].apply(lambda x: formatBusinessCodes(x))
Run Code Online (Sandbox Code Playgroud)

上面的代码处理长度为6的business_code,但我发现business_codes的长度变化<和> 6.我正在逐个状态地验证数据.每个州的business_code长度都不同(IL-6 len,OH-8 len).所有代码必须均匀填充.所以10的IL代码应该生成000010等.我需要处理所有异常.使用命令行解析参数(argparse)和string.zfill.

unu*_*tbu 5

你可以使用str.format:

def formatBusinessCodes(code):
    """ Function that formats business codes.  Pass in a business code which will convert to a string with 6 digits """
    return '{:06d}'.format(code)
Run Code Online (Sandbox Code Playgroud)
In [23]: formatBusinessCodes(1)
Out[25]: '000001'

In [26]: formatBusinessCodes(10)
Out[26]: '000010'

In [27]: formatBusinessCodes(123)
Out[27]: '000123'
Run Code Online (Sandbox Code Playgroud)

格式{:06d}可以理解如下:

  • {...}表示用以下参数替换以下内容format(例如code).
  • : 开始格式规范
  • 0 实现零填充
  • 6是字符串的宽度.但请注意,大于6位的数字不会被截断.
  • d意味着参数(例如code)应该是整数类型.

注意在Python2.6中,格式字符串需要额外的0:

def formatBusinessCodes(code):
    """ Function that formats business codes.  Pass in a business code which will convert to a string with 6 digits """
    return '{0:06d}'.format(code)
Run Code Online (Sandbox Code Playgroud)