首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何消除道布中的值,使其每个部分都不超过所需的数字数?

如何消除道布中的值,使其每个部分都不超过所需的数字数?
EN

Stack Overflow用户
提问于 2022-10-21 07:16:49
回答 1查看 16关注 0票数 1

道布有三部分,如下所示:

代码语言:javascript
复制
11/012/1992

上述例子的预期道布产出如下:

代码语言:javascript
复制
11/12/1992

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

如果“/”的第一部分包含两个以上的数字,则必须删除第一个数字;如果“/”之前的第二个部分包含两个以上的数字,则必须删除第二个数字;如果“/”之前的第三个部分包含超过4个数字,则必须删除第一个数字。

  1. ,如果“/”的第三个部分包含超过4个数字,则必须消除第一个数字。

我编写的代码如下:

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

发布于 2022-10-21 07:32:40

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

代码语言:javascript
复制
# option 1, just remove the extra digits
df['DOB2'] = df['DOB'].str.replace(r'^.*?(\d{1,2}/).*?(\d{1,2}/).*?(\d{4})$', r'\1\2\3')

# 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'\1\2\3'))
                .dt.strftime('%m/%d/%Y')
             )

产出:

代码语言:javascript
复制
             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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74150018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档