【问题标题】:Convert "Q12019" object to datetime64将“Q12019”对象转换为 datetime64
【发布时间】:2019-11-08 03:53:08
【问题描述】:

我有一个 pandas 数据框,其中一列包含以下格式的季度和年份字符串:Q12019

我的问题:​如何将其转换为日期时间格式?

【问题讨论】:

    标签: python python-3.x datetime


    【解决方案1】:

    您可以使用 Pandas PeriodIndex 来完成此操作。只需将您的季度列重新格式化为预期的格式%Y-%q(在regex 的帮助下,将年份移到前面):

    reformatted_quarters = df['QuarterYear'].str.replace(r'(Q\d)(\d+)', r'\2\1')
    print(reformatted_quarters)
    

    打印出来:

    0    2019Q1
    1    2018Q2
    2    2019Q4
    Name: QuarterYear, dtype: object
    

    然后,将此结果提供给PeriodIndex 以获得datetime 格式。使用'Q' 指定季度频率:

    datetimes = pd.PeriodIndex(reformatted_quarters, freq='Q').to_timestamp()
    print(datetimes)
    

    打印出来:

    DatetimeIndex(['2019-01-01', '2018-04-01', '2019-10-01'], dtype='datetime64[ns]', name='Quarter', freq=None)
    

    注意:Pandas PeriodIndex 功能经历了行为回归(记录在 here),因此对于大于 0.23.4 的 Pandas 版本,您需要改用 reformatted_quarters.values

    datetimes = pd.PeriodIndex(reformatted_quarters.values, freq='Q').to_timestamp()
    

    【讨论】:

    • 第一步有效,但我收到第二步错误:datetimes = pd.PeriodIndex(reformatted_quarters, freq='Q').to_timestamp() print(datetimes)
    • @KashThak 感谢您的提醒。 PeriodIndex 预期数据类型最近发生了变化,因此根据您的 Pandas 版本,尝试改用 pd.PeriodIndex(reformatted_quarters.values ...。请参阅我的更新答案。
    【解决方案2】:
    (quarter) => new Date(quarter.slice(-4), 3 * (quarter.slice(1, 2) - 1), 1)
    

    这将为您提供每个季度的开始(例如,q42019 将提供2019-10-01)。

    您可能应该包含一些验证,因为它只会持续数月(例如 q52019 = q12020 = 2020-01-01)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-06
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 2020-11-05
      • 2014-10-17
      • 2012-10-19
      相关资源
      最近更新 更多