代码之家  ›  专栏  ›  技术社区  ›  Tmiskiewicz

数据帧-删除特殊字符

  •  -1
  • Tmiskiewicz  · 技术社区  · 2 年前

    我的DF如下所示:

    id date
    1  '  : 07/01/2020 23:25'
    2  ': 07/02/2020'
    3  ' 07/03/2020 23:25 1'
    4  '07/04/2020'
    5  '23:50 07/05/2020'
    6  '07 06 2023'
    7  '00:00 07 07 2023'
    

    我需要删除所有介于“:”之间的特殊字符和数字,所以DF应该如下所示

    id date
    1 07/01/2020 
    2 07/02/2020 
    3 07/03/2020 
    4 07/04/2020 
    5 07/05/2020 
    

    我不能使用简单的: df['date'].str.split(':').str[0] df['date'].str.replace(":",'') 因为我会丢失正确的值。你知道我该怎么解决这个问题吗?

    当做

    1 回复  |  直到 2 年前
        1
  •  2
  •   mozway    2 年前

    假设你想转换为datetime,你不一定要清理字符串,你可以通过 exact=False to_datetime :

    df['out'] = pd.to_datetime(df['date'], format='%d/%m/%Y', exact=False)
    

    否则,对于字符串,请使用 (\d{2}/\d{2}/\d{4}) 正则表达式和 str.extract

    df['clean'] = df['date'].str.extract(r'(\d{2}\/\d{2}\/\d{4})')
    

    输出:

       id                  date        out       clean
    0   1    : 07/01/2020 23:25 2020-01-07  07/01/2020
    1   2          : 07/02/2020 2020-02-07  07/02/2020
    2   3    07/03/2020 23:25 1 2020-03-07  07/03/2020
    3   4            07/04/2020 2020-04-07  07/04/2020
    4   5      23:50 07/05/2020 2020-05-07  07/05/2020
    
    更新示例:

    用空格提取或 / 作为分离器,那么 replace 空间由 / .

    df['clean'] = (df['date']
                   .str.extract(r'(\d{2}[ /]\d{2}[ /]\d{4})',
                                expand=False)
                   .str.replace(' ', '/')
                  )
    

    输出:

       id                  date       clean
    0   1    : 07/01/2020 23:25  07/01/2020
    1   2          : 07/02/2020  07/02/2020
    2   3    07/03/2020 23:25 1  07/03/2020
    3   4            07/04/2020  07/04/2020
    4   5      23:50 07/05/2020  07/05/2020
    5   6            07 06 2023  07/06/2023
    6   7      00:00 07 07 2023  07/07/2023