我想更改下面的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.
你可以使用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)