如何在Python中将日期转换为季度?

27

我想将我的日期列转换为该年度特定季度的指标,例如2018q12018q2等。

我的数据看起来像这样,每个季度我都有股票回报(此处未显示回报列),以及相应的日期,我想获得的是季度列(或类似的内容)

data = [{'date': '3/22/18', 'quarter': 1},{'date': '3/22/18', 'quarter': 1}, 
{'date': '6/22/18', 'quarter': 3},{'date': '6/22/18', 'quarter': 3},
{'date': '9/22/18', 'quarter': 2},{'date': '9/22/18', 'quarter': 2}]
df = pd.DataFrame(data, index=['s1', 's2','s1','s2','s1','s2'])

        date  quarter
 s1  3/22/13       2013q1
 s2  3/24/13       2013q1
 s1  6/21/13       2013q2
 s2  6/26/13       2013q2
 s1  9/21/13       2013q3
 s2  9/28/13       2013q3
7个回答

37

to_datetime:

df.date = pd.to_datetime(df.date)

PeriodIndex

df['quarter'] = pd.PeriodIndex(df.date, freq='Q')

         date quarter
s1 2018-03-22  2018Q1
s2 2018-03-22  2018Q1
s1 2018-06-22  2018Q2
s2 2018-06-22  2018Q2
s1 2018-09-22  2018Q3
s2 2018-09-22  2018Q3

22

Series.dt.to_period

import pandas as pd
df['date'] = pd.to_datetime(df['date'])

df['quarter'] = df['date'].dt.to_period('Q')

         date quarter
s1 2018-03-22  2018Q1
s2 2018-03-22  2018Q1
s1 2018-06-22  2018Q2
s2 2018-06-22  2018Q2
s1 2018-09-22  2018Q3
s2 2018-09-22  2018Q3

10

datecolumn.dt.quarter功能将有所帮助。

df.date = pd.to_datetime(df.date)
df["Quarter"] = df.date.dt.quarter

5

在IT技术方面,Pandas提供了一个方法来帮助你,它叫做 pd.PeriodIndex(monthcolumn, freq='Q')。你可能需要使用datetime库先将月份列转换为日期数据类型。

Pandas也有一个名为'to_date'的方法,可以将列转换为日期列。

例如:

df["year"] = pd.to_date(df["year"])

4

只需提取日期字符串的月份部分,季度可以通过 (month - 1) // 3 + 1 简单地获得。

由于您的数据是一个字典,其中 'date' 键是形式为 (\d{1:2})/(\d{1:2})/(\d\d)str,因此可以获取日期的“月”部分(第一个组),将其转换为整数,并使用 (month - 1) // 3 + 1 来获取季度。

可以使用正则表达式或简单的字符串切片来提取日期字符串的月份部分。因此,季度范围从1到4,并由以下方式确定:

  • 对于 0 <= m <= 2 (Q1),m // 3 为 0
  • 对于 3 <= m <= 5 (Q2),m // 3 为 1
  • 对于 6 <= m <= 8 (Q3),m // 3 为 2
  • 对于 9 <= m <= 11 (Q4),m // 3 为 3

其中 m = month - 1


1
以下是提取季度编号的一种方法。
In [56]: datetime.date.today()
Out[56]: datetime.date(2021, 10, 20)

In [57]: ts = pd.Timestamp(datetime.date.today()).quarter

In [58]: ts
Out[58]: 4

1

.date不起作用,因为它是数据框架的一个函数。

df_q8['Date'] = pd.to_datetime(df_q8['Date'])
df_q8['quarter'] = pd.PeriodIndex(df_q8['Date'] ,freq='Q')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接