使用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
相关产品推荐
相关产品推荐

