如何消除 DOB 结果中的值,使其每个部分包含的位数不超过所需的位数?



DOB包含三个部分,例如如下所示:

11/012/1992

上述示例所需的DOB输出应如下所示:

11/12/1992

因此,基本上,代码应该以这样的方式消除这些值:

  1. 如果直到'/'的第一部分包含两个以上的数字,则必须删除第一个数字
  2. 如果"/"之前的第二部分包含2个以上的数字,则必须删除第一个数字
  3. 如果"/"之前的第三部分包含4位以上的数字,则必须删除第一位

我写的代码如下:

def dob_postprocessing(in_str):
if len(in_str) > 10:
if in_str[2] != '/':
in_str[0].replace(in_str[0], '', 1)

if in_str[5] != '/':
in_str[3].replace(in_str[3], '', 1)

if len(in_str[6:]) > 4:
in_str[6].replace(in_str[6], '', 1)

else:
return in_str

我没有得到想要的输出。有人能帮我吗?非常感谢。

您可以使用str.replace来移除不需要的部件:

# option 1, just remove the extra digits
df['DOB2'] = df['DOB'].str.replace(r'^.*?(d{1,2}/).*?(d{1,2}/).*?(d{4})$', r'123')
# option 2, also pad the missing digits
df['DOB3'] = (pd.to_datetime(df['DOB'].str.replace(r'^.*?(d{1,2}/).*?(d{1,2}/).*?(d{4})$', r'123'))
.dt.strftime('%m/%d/%Y')
)

输出:

DOB        DOB2        DOB3
0    11/012/1992  11/12/1992  11/12/1992
1  011/012/01992  11/12/1992  11/12/1992
2      11/2/1992   11/2/1992  11/02/1992

相关内容

  • 没有找到相关文章

最新更新