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

使用pandas.Series.str.extract提取年份和季度的正则匹配问题

解决pandas提取年份和季度的匹配异常问题

为啥会出这问题?你用的正则r'.*(\d{4}).*(Q[1-4]).*'要求必须同时匹配到年份和季度,没有季度的行满足不了整个正则的匹配条件,结果年份列也跟着返回NaN。

直接改正则就行,把季度匹配的部分设为可选,同时调整结构避免贪婪匹配干扰,确保年份总能被捕获:

r'(\d{4})(?:.*(Q[1-4]))?'

实际用例代码

import pandas as pd

# 模拟你的数据
data = {'origin': ['Divvy_Stations_2013', 'Divvy_Stations_2014-Q1Q2', 'Divvy_Stations_2015']}
tables = pd.DataFrame(data)

# 提取年份和季度
result = tables['origin'].drop_duplicates().str.extract(pat=r'(\d{4})(?:.*(Q[1-4]))?')
print(result)

输出结果

0     1
0  2013  NaN
1  2014   Q1
2  2015  NaN

要是想给列起名字,用命名捕获组更方便:

result = tables['origin'].drop_duplicates().str.extract(pat=r'(?P<year>\d{4})(?:.*(?P<quarter>Q[1-4]))?')

这样出来的结果会有year和quarter列,无季度的行只有季度列为NaN,年份正常提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:00:57