Pandas str.extract 返回 NaN

Pandas str.extract returning NaN

我有以下df

Trends                       Value   
2021-12-13T08:00:00.000Z       45
2021-12-13T07:00:00.000Z       32
2021-12-13T06:42:10.000Z       23
2021-12-13T06:27:00.000Z       45
2021-12-10T05:00:00.000Z       23

我运行下面一行:

df['Trends'].str.extract('^(.*:[1-9][1-9].*)$', expand=True)

它returns:

0
NaN  
NaN   
2021-12-13T06:42:10.000Z  
2021-12-13T06:27:00.000Z   
NaN     

我的 objective 是使用正则表达式,提取任何分钟和秒数大于零的趋势。正则表达式有效(经过测试)并且该行也有效,但我不明白的是为什么它在不匹配时返回 NaN ?我浏览了其他几个 SO,这条线几乎是一样的。

我的预期结果:

2021-12-13T06:42:10.000Z  
2021-12-13T06:27:00.000Z   

您的解决方案已接近;你可以用 str.match 匹配,然后过滤:

df[df.Trends.str.match('^(.*:[1-9][1-9].*)$')].Trends

输出:

2    2021-12-13T06:42:10.000Z
3    2021-12-13T06:27:00.000Z

以前的答案不适用于以下数据(其中分钟为 00 但秒不是,反之亦然),但适用于此更新的正则表达式。

df[df.Trends.str.match('^(?!.*:00:00\..*)(.*:[0-9]+:[0-9]+\..*)$')].Trends

df[df.Trends.str.match('^(?!.*:00:00\..*)(.*:.*\..*)$')].Trends

或者如果秒不重要,但应该选择 01 分钟

df[df.Trends.str.match('^(?!.*:00:\d+\..*)(.*:.*\..*)$')].Trends

Trends                       Value   
2021-12-13T07:00:00.000Z       32
2021-12-13T07:00:01.000Z       32
2021-12-13T07:00:10.000Z       32
2021-12-13T07:01:00.000Z       32
2021-12-13T07:10:00.000Z       32