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

如何将Pandas DataFrame日期列转换为对应期末日期?

解决Pandas中周期字符串转期末日期的问题

这个需求我之前处理过类似的,咱们先拆解清楚你给出的格式规则,再写代码实现:

先明确转换规则

根据你的示例,总结出几种格式对应的期末日期:

  • FQXX:对应XX年的12月31日(等价于当年第4季度末)
  • XQXX:X是季度数(1-4),对应XX年第X季度的最后一天(1Q→3/31,2Q→6/30,3Q→9/30,4Q→12/31)
  • FYXX:对应XX年的12月31日(当年年末)
  • H1XX:对应XX年的6月30日(上半年末);如果有H2XX,对应XX年的12月31日(下半年末)

实现步骤

我们可以写一个自定义转换函数,再用Pandas的apply方法批量处理整个列:

1. 导入必要库

import pandas as pd

2. 定义转换函数

这个函数会逐个解析每个日期字符串,返回对应的期末日期:

def convert_to_end_date(date_str):
    # 提取年份:取字符串最后两位,转换为4位年份(这里默认是20XX年,若需支持19XX可调整逻辑)
    year = 2000 + int(date_str[-2:])
    
    # 根据前缀判断周期类型
    if date_str.startswith('FQ'):
        # FQXX → 当年12月31日
        return pd.Timestamp(year, 12, 31)
    elif 'Q' in date_str:
        # XQXX → 对应季度的最后一天,用pd.Period更优雅
        qtr = int(date_str.split('Q')[0])
        quarter_period = pd.Period(f"{year}Q{qtr}", freq='Q')
        return quarter_period.end_time
    elif date_str.startswith('FY'):
        # FYXX → 当年12月31日
        return pd.Timestamp(year, 12, 31)
    elif date_str.startswith('H'):
        # H1XX→6/30,H2XX→12/31
        half = date_str[1]
        if half == '1':
            return pd.Timestamp(year, 6, 30)
        elif half == '2':
            return pd.Timestamp(year, 12, 31)
    else:
        # 遇到未知格式返回NaT(方便后续处理缺失值)
        return pd.NaT

3. 批量处理DataFrame列

用示例数据测试一下:

# 构造示例DataFrame
df = pd.DataFrame({'Date': ['FQ18', '1Q19', 'FY22', 'H123', '3Q20', 'H221']})

# 应用转换函数生成新列
df['End_Date'] = df['Date'].apply(convert_to_end_date)

# 查看结果
print(df)

运行后输出结果:

Date           End_Date
0  FQ18 2018-12-31 00:00:00
1  1Q19 2019-03-31 00:00:00
2  FY22 2022-12-31 00:00:00
3  H123 2023-06-30 00:00:00
4  3Q20 2020-09-30 00:00:00
5  H221 2021-12-31 00:00:00

注意事项

  • 如果你的数据中包含19XX年的周期(比如FQ99),可以调整年份提取逻辑:比如判断最后两位数字,如果大于50则用1900 + 数字,否则用2000 + 数字。
  • 如果有其他特殊格式,可以在函数中继续添加判断分支。
  • 转换后的End_Date列是Pandas的Timestamp类型,方便后续做时间序列分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:20:39