如何将Pandas的Period列拆分为季度和年份两个独立列
Pandas拆分非标准Period列为季度、年份列解决方案
针对格式为Q[数字]'[两位年份]的object类型Period列,可通过以下两种方式实现拆分:
方法1:字符串分割(适合格式高度规整的场景)
直接以单引号为分隔符拆分后补全年份前缀即可,代码如下:
import pandas as pd # 构造示例数据 df = pd.DataFrame({'Period': ["Q3'16", "Q1'17", "Q2'17","Q3'17"]}) # 拆分列为两列 df[['Quarter', 'Year']] = df['Period'].str.split("'", expand=True) # 补全为四位年份,默认均为20xx年,若有19xx需求可自行调整逻辑 df['Year'] = '20' + df['Year'] # 可选:删除原始Period列 df = df.drop('Period', axis=1)
运行后即可得到预期结果:
Quarter Year 0 Q3 2016 1 Q1 2017 2 Q2 2017 3 Q3 2017
方法2:正则提取(容错性更高)
如果存在部分数据格式不规整的情况,可通过正则匹配精准提取季度和年份信息:
# 正则规则解释:(Q\d)匹配Q+1位数字的季度部分,(\d{2})匹配单引号后的两位年份 df[['Quarter', 'Year']] = df['Period'].str.extract(r"(Q\d)'(\d{2})") df['Year'] = '20' + df['Year']
如果需要兼容19xx年份,可调整年份处理逻辑:
# 示例:两位年份大于等于90则判定为19xx,否则为20xx,可根据业务需求调整阈值 df['Year'] = df['Year'].apply(lambda x: f"19{x}" if int(x) >=90 else f"20{x}")
内容的提问来源于stack exchange,提问作者yash agarwal
相关产品推荐
相关产品推荐

