You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas:如何通过正则表达式筛选日期时间列?

问题:筛选赛事时间DataFrame的正确正则表达式方法

我有一个包含赛事时间的DataFrame,数据如下:

df:

1    05 Mar 2023 16:00
2    05 Mar 2023 16:00
3       05 Mar 2023 HT
4      05 Mar 2023 FIN
5    05 Mar 2023 90+ '
6    05 Mar 2023 18:00
7    05 Mar 2023 18:30

我尝试执行以下代码:

df= df[~df.datetime.str.contains("'|\w+$", regex=True, na=False)]

预期保留的行是带具体时间(如16:00)的记录:

df:

1    05 Mar 2023 16:00
2    05 Mar 2023 16:00
6    05 Mar 2023 18:00
7    05 Mar 2023 18:30

但实际得到了空DataFrame,请问正确的正则筛选方法是什么?


问题原因

你写的正则'|\w+$会匹配所有行:

  • \w+$匹配行尾的字母或数字,而正常时间如16:00的末尾是数字,也会被匹配,所以~取反后就把所有行都过滤掉了,导致空DataFrame。

正确方法

我们需要精准筛选出格式为DD MMM YYYY HH:MM的记录,有两种可行思路:

思路1:直接匹配符合时间格式的行

用正则匹配行尾为HH:MM格式的记录:

df = df[df.datetime.str.contains(r'\d{2}:\d{2}$', regex=True, na=False)]

解释:\d{2}:\d{2}$表示行尾必须是「两位数字+冒号+两位数字」的格式,正好对应16:00这类标准时间。

思路2:排除异常后缀的行

如果要针对性排除带HT、FIN、90+ '的行,正则精准匹配这些异常后缀:

df = df[~df.datetime.str.contains(r'(HT|FIN|90\+ \')$', regex=True, na=False)]

解释:(HT|FIN|90\+ \')$匹配行尾为HT、FIN或90+ '的记录,取反后就保留正常时间行。

验证结果

两种方法都能得到你预期的DataFrame:

1    05 Mar 2023 16:00
2    05 Mar 2023 16:00
6    05 Mar 2023 18:00
7    05 Mar 2023 18:30

内容的提问来源于stack exchange,提问作者PyNoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:35:04