带有熊猫的日期正则表达式过滤器不起作用

Posted

技术标签:

【中文标题】带有熊猫的日期正则表达式过滤器不起作用【英文标题】:Date regex filter with pandas not working 【发布时间】:2020-03-14 06:01:45 【问题描述】:

我的 DF 列中有信用卡到期日期(格式 = mm/yy) 我希望获得将在 mm/25(年 = 2025)后到期的卡

我正在尝试使用正则表达式来过滤意甲,但它出错了

我测试了一些正则表达式来了解被过滤的内容,我得到了这个

df.Exp_Date.filter(regex='.+') --> recognize all dates
df.Exp_Date.filter(regex='.+\/') --> return empty list 
df.Exp_Date.filter(regex='.+\/.+') --> return empty list

df.Exp_Date.filter(regex='\w+') --> recognize all dates (ok)
df.Exp_Date.filter(regex='\w+\/') --> return empty list
df.Exp_Date.filter(regex='\w+\/\w+') --> return empty list

我的问题可能在 / 字符上。我在 regexpal 上测试了所有正则表达式,它在那里工作,但在我的过滤器上没有。

【问题讨论】:

【参考方案1】:

你能用 contains 代替吗:

df1
#Out[472]: 
#   Name   Date    OPP    Result
#0  Will  11/20   @DAL  L110-102
#1  Bill  11/25   @POR  W114-106
#2  Bill  11/24   @LAC    L98-88
#3  Mark  11/25   @LAL  W113-104
#4   Sam  11/25    @NO  W122-104
#5  Dude   9/24  vsSAC  W124-120
#6  What   8/23   @MIL  L115-105

df1[df1.Date.str.contains('/25')]                                                                                                                                                                 
#Out[473]: 
#   Name   Date   OPP    Result
#1  Bill  11/25  @POR  W114-106
#3  Mark  11/25  @LAL  W113-104
#4   Sam  11/25   @NO  W122-104

【讨论】:

【参考方案2】:

尝试像这样制作正则表达式字符串原始字符串: 正则表达式=r'.+/.+',而不是正则表达式='.+/.+'

使用原始字符串的原因是当您使用转义字符(反斜杠)时,python 对它的解释与正则表达式不同。使用原始字符串可以防止这种情况。

这里有一个更好的解释: What exactly is a "raw string regex" and how can you use it?

【讨论】:

有相同的输出,我将搜索更多关于正则表达式以了解发生了什么

以上是关于带有熊猫的日期正则表达式过滤器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式过滤熊猫

如何在熊猫过滤器函数中反转正则表达式

如何通过熊猫过滤满足正则表达式的行

使用正则表达式提取不同格式的日期并对其进行排序 - 熊猫

带有熊猫列的正则表达式

调试后正则表达式不起作用