繁体   English   中英

如何将字符串日期范围更改为开始日期和结束日期?

[英]How to change string date range to start and end date?

我正在尝试将字符串日期范围(例如7月1日至30日)分隔为开始日期和结束日期作为日期时间(例如07/1/2019和07/30/2019)。 如何转换?

我曾尝试将字符串制动成碎片,但我相信使用正则表达式的唯一方法。

列中的字符串示例:

  "1 to 30 of July" "10 to 12 of August" "20 of January to 10 of February" 

我用过^(\\d{1,2})\\s([az]{2})\\s(\\d{1,2})\\s([az]{2})\\s(\\w{1,13})但我缺少M的D到M的D。

他们都在2019年

我们可以将regex与Series.str.extractall一起使用,以从您的数据中提取数字和月份。 然后,我们最终将字符串连接在一起:

days = df['Date'].str.extractall('(\d+)').unstack()

months = '('+'|'.join(['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'])+')'
monthnames = df['Date'].str.extractall(months).unstack().ffill(axis=1)

df = days + ' ' + monthnames.ffill(axis=1)
df.columns=['date_start', 'date_end']

产量

   date_start     date_end
0      1 July      30 July
1   10 August    12 August
2  20 January  10 February

如果您希望它们采用不带月份名称的日期格式:

df.apply(lambda x: pd.to_datetime(x, format='%d %B').dt.strftime('%m-%d'))

  date_start date_end
0      07-01    07-30
1      08-10    08-12
2      01-20    02-10

下面将提取日期和月份:

# update your month list properly
months = ['January', 'February', 'July', 'August']

# pattern
pattern = f'(\d+) (?:of ({m}))?\s?to (\d+).*({m})'

# extract:
s.str.extract(patterns)

输出:

    0        1   2         3
0   1      NaN  30      July
1  10      NaN  12    August
2  20  January  10  February

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM