嗨,我想提取数据框列中的日期,日期用“-”或“到”分隔
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/