【问题标题】:How to convert dates to quarters in Python?如何在 Python 中将日期转换为季度?
【发布时间】:2018-10-31 17:27:23
【问题描述】:

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

【问题讨论】:

    标签: python pandas date


    【解决方案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 形式为 (\d{1:2})/(\d{1: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 <= 8m // 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
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-11-09
                  • 2021-07-26
                  • 1970-01-01
                  • 2016-02-10
                  • 2015-09-13
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多