将 YYYYQQ 转换为 YYYY-MM-DD

数据挖掘 Python 熊猫 数据清理
2022-03-05 09:38:04

我一直在尝试将 2002Q3 之类的内容转换为 2002-09-01,但如果我使用以下内容,它会将 2002Q3 转换为 2002-07-01:

pd.PeriodIndex(['2002Q3], freq='Q').to_timestamp()

我怎样才能让它与 2002-06-01 匹配呢?例如,我希望 2002Q1 对应 2002-03-01,2002Q2 对应 2002-06-01,2002Q3 对应 2002-09-01,2002Q4 对应 2002-12-01。谢谢!

1个回答

由于您的最终目标是公正的datetime64,请使用replacewith to_datetime

  • 给定一系列YYYYQQ字符串:

    qtr = pd.Series([f'{y}Q{q}' for y in range(2000, 2010) for q in (1, 2, 3, 4)])
    
    # 0     2000Q1
    # 1     2000Q2
    # 2     2000Q3
    # 3     2000Q4
    # 4     2001Q1
    # ...
    # 38    2009Q3
    # 39    2009Q4
    # dtype: object
    
  • replaceQQ您想要的部分-mm-dd并转换to_datetime

    mapping = {
        'Q1': '-03-01',
        'Q2': '-06-01',
        'Q3': '-09-01',
        'Q4': '-12-01',
    }
    pd.to_datetime(qtr.replace(mapping, regex=True))
    
    # 0    2000-03-01
    # 1    2000-06-01
    # 2    2000-09-01
    # 3    2000-12-01
    # 4    2001-03-01
    # ...         ...
    # 38   2009-09-01
    # 39   2009-12-01
    # dtype: datetime64[ns]