嗨,我想提取数据框列中的日期,日期用“-”或“到”分隔

 pop       DATE
 0  1.5   OWREAP-01/06/18to30/06/18
 1  1.7   OW - 01/07/18 - 30/08/18
 2  3.6   BCREAP - 01/08/18 to 30/08/18
 3  2.4   BCGRA TO 01/08/18 to 30/08/18


我试图用“-”替换“to”和“TO”
df['DATE'].str.replace('to|TO','-')
 pop       DATE
 0  1.5   OWREAP-01/06/18-30/06/18
 1  1.7   OW - 01/07/18 - 30/08/18
 2  3.6   BCREAP - 01/08/18 - 30/08/18
 3  2.4   BCGRA - 01/08/18 - 30/08/18

现在我需要知道如何提取最后一个连字符前后的 8 个字符
IE
 pop       type   startdate enddate
 0  1.5   OWREAP  01/06/18  30/06/18
 1  1.7   OW      01/07/18  30/08/18
 2  3.6   BCREAP  01/08/18  30/08/18
 3  2.4   BCGRA   01/08/18  30/08/18

最佳答案

您可以使用

reg = r'(?i).*(\d{2}/\d{2}/\d{2}(?:\d{2})?)\s*(?:TO|-)\s*(\d{2}/\d{2}/\d{2}(?:\d{2})?)'
df[['startdate','enddate']] = df.pop('DATE').str.extract(reg)

请参阅 regex demo

详细信息
  • (?i) - 不区分大小写的标志
  • .* - 任意 0+ 个字符,尽可能多
  • (\d{2}/\d{2}/\d{2}(?:\d{2})?) - 开始日期捕获组:2 位,/,2 位,/,2 或 4 位
  • \s* - 0+ 空格
  • (?:to|-) - to-
  • \s*
  • \s* - 0+ 空格
  • (\d{2}/\d{2}/\d{2}(?:\d{2})?) - 结束日期捕获组:2 位,/,2 位,/,2 或 4 位

  • python 测试:
    df = pd.DataFrame( {'DATE': ["OWREAP-01/06/18to30/06/18"],
                        'dummy': ["value"]})
    reg = r'(?i).*(\d{2}/\d{2}/\d{2}(?:\d{2})?)\s*(?:to|-)\s*(\d{2}/\d{2}/\d{2}(?:\d{2})?)'
    df[['startdate','enddate']] = df.pop('DATE').str.extract(reg)
    >>> df
       dummy startdate   enddate
    0  value  01/06/18  30/06/18
    

    关于python - RegEx 用于在最后一个连字符之前提取一定数量的字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56097511/

    10-13 07:05
    查看更多