将日期转换为特定格式

时间:2018-02-26 19:12:22

标签: python-3.x pandas

我有一个pandas数据框,如下所示:

import pandas as pd
df1 = pd.DataFrame({'Counterparty':['Bank','Client','Bank','Bank','Bank','Bank'],
         'Date':['4Q18','1Q19','2Q19','4Q21','FY22','H123']
        })

我想转换日期'从字符串到日期的列,使得日期是该特定时间段的最后日期。即,' FQ18' = 2018年12月31日,' 1Q19' = 2019年3月31日,' FY22' = 2022年12月31日,' H123' = 2023年6月30日

有任何建议如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

正如@jpp所提到的,你将不得不做一些自定义。据我所知,目前没有将“FY22”映射到2022-12-31的功能。根据您展示的有限示例,这里有一些可以帮助您入门的内容:

import re

import pandas as pd
from pandas.core.tools.datetimes import DateParseError
from pandas.tseries import offsets

halfyr = re.compile(r'H(?P<half>\d)(?P<year>\d{2})')
fiscalyr = re.compile(r'FY(?P<year>\d{2})')


def try_qend(date):
    try:
        return pd.to_datetime(date) + offsets.QuarterEnd()
    except (DateParseError, ValueError):
        halfyr_match = halfyr.match(date)
        if halfyr_match:
            half, year = [int(i) for i in halfyr_match.groups()]
            month = 6 if half == 1 else 12
            return pd.datetime(2000 + year, month, 1) + offsets.MonthEnd()
        else:
            fiscalyr_match = fiscalyr.match(date)
            if fiscalyr_match:
                year = int(fiscalyr_match.group('year'))
                return pd.datetime(2000 + year, 12, 31)
            else:
                # You're SOL
                return pd.NaT


def parse_dates(dates):
    return pd.to_datetime([try_qend(date) for date in dates])

假设:

  • 所有年份都是20岁,而不是19xx。
  • 此处的正则表达式模式完整地描述了年末/财政年度语法集。

示例:

dates = ['4Q18','1Q19','2Q19','4Q21','FY22','H123']

parse_dates(dates)

DatetimeIndex(['2018-12-31', '2019-03-31', '2019-06-30', '2021-12-31',
               '2022-12-31', '2023-06-30'],
              dtype='datetime64[ns]', freq=None)
相关问题