如何在 Python 中将日期转换为季度?
Posted
技术标签:
【中文标题】如何在 Python 中将日期转换为季度?【英文标题】:How to convert dates to quarters in Python? 【发布时间】:2018-10-31 17:27:23 【问题描述】:我想将我的日期列转换为特定年份季度的指标,例如 2018q1
或 2018q2
等。
我的数据是这样的,我每季度有一次股票收益(这里没有显示收益列),以及相应的日期,列季度是我想要得到的(或类似的)
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
【问题讨论】:
【参考方案1】: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
【讨论】:
【参考方案2】:datecolumn.dt.quarter
功能会有所帮助。
df.date = pd.to_datetime(df.date)
df["Quarter"] = df.date.dt.quarter
【讨论】:
【参考方案3】:Pandas 有一个方法可以帮助你,它叫做pd.PeriodIndex(monthcolumn, freq= 'Q')
。您可能需要先使用 datetime 库将您的月份列转换为数据类型。
Pandas 还有一个名为'to_date'
的方法,您可以使用该方法将列转换为日期列。
例如:
df["year"] = pd.to_date(df["year"])
【讨论】:
【参考方案4】: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
【讨论】:
【参考方案5】:只需提取日期字符串的月份部分。季度可通过(month - 1) // 3 + 1
简单获取。
由于您的数据是一个字典,其 'date'
键是 str
形式为 (\d1:2)/(\d1:2)/(\d\d)
,您可以获取日期的“月”部分(第一组),将其转换为 int,然后使用(month - 1) // 3 + 1
获取季度。
提取日期字符串的月份部分可以使用正则表达式甚至简单的字符串切片来完成。因此,季度的范围是 1 到 4,由以下因素决定:
m // 3
对于 0 <= m <= 2
为 0(Q1)
m // 3
对于 3 <= m <= 5
是 1(第二季度)
对于6 <= m <= 8
,m // 3
为 2(第三季度)
m // 3
对于 9 <= m <= 11
是 3(Q4)
在哪里m = month - 1
【讨论】:
【参考方案6】:.date 不起作用,因为它是数据框的函数。
df_q8['Date'] = pd.to_datetime(df_q8['Date'])
df_q8['quarter'] = pd.PeriodIndex(df_q8['Date'] ,freq='Q')
【讨论】:
【参考方案7】:提取季度数的一种方法如下。
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
【讨论】:
以上是关于如何在 Python 中将日期转换为季度?的主要内容,如果未能解决你的问题,请参考以下文章
如何在python中将字符串日期转换为日期时间格式? [复制]