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
我有以下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