如何用Pandas简洁地将年季度(yyyyQQ)转换为目标日期
解决Pandas将年份季度转换为季度末日期的问题
你可以通过以下两种方法将季度起始日期转换为季度结束日期:
方法一:使用pd.Period类型
将拼接后的年份季度字符串转换为季度周期类型,直接提取周期的结束日期:
import pandas as pd df = pd.DataFrame({'year':['1980','1980','1980','1980'],'qtr':['Q1','Q2','Q3','Q4']}) # 拼接年份和季度,转换为Period类型,再提取结束日期 df['date'] = df.apply(lambda x: pd.Period(f"{x['year']}{x['qtr']}", freq='Q').end_time, axis=1) print(df[['date','year','qtr']])
输出结果:
date year qtr 0 1980-03-31 1980 Q1 1 1980-06-30 1980 Q2 2 1980-09-30 1980 Q3 3 1980-12-31 1980 Q4
方法二:使用QuarterEnd日期偏移量
基于你已得到的季度起始日期,通过pd.offsets.QuarterEnd调整到季度末:
import pandas as pd df = pd.DataFrame({'year':['1980','1980','1980','1980'],'qtr':['Q1','Q2','Q3','Q4']}) # 先得到季度起始日期 df['start_date'] = pd.to_datetime(df['year'] + df['qtr'], infer_datetime_format=True) # 调整为季度末日期 df['date'] = df['start_date'] + pd.offsets.QuarterEnd() print(df[['date','year','qtr']])
输出结果和方法一一致。
说明
pd.Period(freq='Q')会识别季度周期,end_time属性直接返回该季度的最后一天(若只需日期可追加.date()转换为纯日期格式)pd.offsets.QuarterEnd()会自动计算当前日期所在季度的最后一天,无需额外调整参数
内容的提问来源于stack exchange,提问作者itthrill
相关产品推荐
相关产品推荐

