将日期转换为特定格式

数字逻辑

我有一个熊猫数据框,看起来像:

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日

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

布拉德·所罗门

如@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])

假设:

  • 所有年份均为20yy,而不是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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章