使用Python pandas将季度标识转换为对应季度首月首日长日期
季度短标识转对应季度首日的实现方案
报错本质是pandas的PeriodIndex默认不识别Q+季度+两位年的自定义格式,先做字符串格式标准化再转换即可,不需要写硬编码映射。
转换规则对齐
转换逻辑严格匹配需求:
- Q1 → 当年1月1日
- Q2 → 当年4月1日
- Q3 → 当年7月1日
- Q4 → 当年10月1日
示例值对应结果完全符合预期:Q123→1/1/2023、Q425→10/1/2025、Q226→4/1/2026、Q326→7/1/2026。
完整可运行代码
import pandas as pd # 正则把原始QxYY格式转成pandas可识别的YYYYQx标准格式 # 例:Q123 → 提取季度位1、两位年23 → 拼接为标准格式2023Q1 std_quarter = df['Date'].str.replace(r'Q(\d)(\d{2})', r'20\2Q\1', regex=True) # 转季度周期后直接转时间戳,默认返回季度首日 df['LongDate'] = pd.PeriodIndex(std_quarter, freq='Q').to_timestamp() # 如需输出为M/D/YYYY格式的字符串(非datetime类型),追加以下行即可 # Windows系统把%-m、%-d替换为%#m、%#d df['LongDate'] = df['LongDate'].dt.strftime('%-m/%-d/%Y')
注意事项
- 代码默认两位年份属于2000-2099区间,如果存在1900-1999年的历史数据,调整正则里的年份前缀补全规则即可
- 不需要额外做日期偏移计算,
pd.PeriodIndex.to_timestamp()对于季度频率默认返回的就是对应季度的第一个自然日 - 如果需要保留datetime类型用于后续时间计算,跳过最后一步strftime格式化即可
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

