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

qjp7pelc  于 5个月前  发布在  Python
关注(0)|答案(7)|浏览(86)

我想将我的日期列转换为该特定年份的季度指标,比如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

字符串

atmip9wb

atmip9wb1#

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

hk8txs48

hk8txs482#

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

字符串

hm2xizp9

hm2xizp93#

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

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

字符串

pkbketx9

pkbketx94#

Pandas有一个方法可以帮助你,它叫做pd.PeriodIndex(monthcolumn, freq= 'Q')。你可能需要先使用datetime libray将你的month列转换为数据类型。
Pandas还有一个名为'to_date'的方法,可以用来将列转换为日期列。
举例来说:

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

字符串

8ehkhllq

8ehkhllq5#

只需提取日期字符串的月份部分。季度可以通过(month - 1) // 3 + 1简单地获得。
因为你的数据是一个字典,其'date'键是(\d{1:2})/(\d{1:2})/(\d\d)形式的str,所以你可以得到日期的“月”部分(第一组),将其转换为int,然后使用(month - 1) // 3 + 1得到季度。
提取日期字符串的月份部分可以使用正则表达式或简单的字符串切片来完成。因此,季度范围从1到4,并由以下公式确定:

  • m // 3对于0 <= m <= 2为0(Q1)
  • 对于3 <= m <= 5m // 3为1(Q2)
  • 对于6 <= m <= 8m // 3为2(第3季度)
  • 对于9 <= m <= 11m // 3为3(第4季度)

其中m = month - 1

6psbrbz9

6psbrbz96#

.date不起作用,因为它是 Dataframe 的函数。

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

字符串

5lwkijsr

5lwkijsr7#

提取季度数的一种方法如下。

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

字符串

相关问题