如何从可变长度字符串提取日期时间并拆分到DataFrame不同列?
通用提取日期和时间并拆分列的解决方案
固定位置截取的方式无法适配文本长度变化的问题,改用正则表达式基于格式模式匹配是更可靠的通用方案,它能识别日期、时间的结构规律,不受月份长度、时间位数变化的影响。
优化后的代码
import pandas as pd text = [ 'FOX News October 27, 2022 5:00pm-6:00pm PDT', 'FOX News April 28, 2022 10:00pm-11:00pm PDT' ] df = pd.DataFrame(text, columns=['text']) # 通过正则匹配拆分日期和时间列 df[['date', 'time']] = df['text'].str.extract(r'FOX News ([A-Za-z]+ \d{1,2}, \d{4}) (\d{1,2}:\d{2}[ap]m-\d{1,2}:\d{2}[ap]m PDT)') print(df)
代码说明
- 正则表达式
r'FOX News ([A-Za-z]+ \d{1,2}, \d{4}) (\d{1,2}:\d{2}[ap]m-\d{1,2}:\d{2}[ap]m PDT)'的作用:FOX News:匹配文本中的固定前缀(注意原文本里是两个空格)- 第一组括号
([A-Za-z]+ \d{1,2}, \d{4}):匹配日期部分,适配月份 日期, 年份的格式,支持1/2位日期、任意长度的英文月份 - 第二组括号
(\d{1,2}:\d{2}[ap]m-\d{1,2}:\d{2}[ap]m PDT):匹配完整时间部分,包含时间段和时区,支持1/2位小时数
str.extract会自动将匹配到的两组内容分别存入新的date和time列
输出结果
| text | date | time |
|---|---|---|
| FOX News October 27, 2022 5:00pm-6:00pm PDT | October 27, 2022 | 5:00pm-6:00pm PDT |
| FOX News April 28, 2022 10:00pm-11:00pm PDT | April 28, 2022 | 10:00pm-11:00pm PDT |
内容的提问来源于stack exchange,提问作者Rohan Vaidya
相关产品推荐
相关产品推荐

