首页 > 解决方案 > 用于时间序列分析的从季度到日期的列标题

问题描述

我查看了很多线程,但无法解决我的问题。我的 df 有以下标题:

 Index(['2005 - Q2', '2005 - Q3', '2005 - Q4', '2006 - Q1', '2006 - Q2',
       '2006 - Q3', '2006 - Q4', '2007 - Q1', '2007 - Q2', '2007 - Q3',
       '2007 - Q4', '2008 - Q1', '2008 - Q2', '2008 - Q3', '2008 - Q4',
       '2009 - Q1', '2009 - Q2', '2009 - Q3', '2009 - Q4', '2010 - Q1',
       '2010 - Q2', '2010 - Q3', '2010 - Q4', '2011 - Q1', '2011 - Q2',
       '2011 - Q3', '2011 - Q4', '2012 - Q1', '2012 - Q2', '2012 - Q3',
       '2012 - Q4', '2013 - Q1', '2013 - Q2', '2013 - Q3', '2013 - Q4',
       '2014 - Q1', '2014 - Q2', '2014 - Q3', '2014 - Q4', '2015 - Q1',
       '2015 - Q2', '2015 - Q3', '2015 - Q4', '2016 - Q1', '2016 - Q2',
       '2016 - Q3', '2016 - Q4', '2017 - Q1', '2017 - Q2', '2017 - Q3',
       '2017 - Q4', '2018 - Q1', '2018 - Q2', '2018 - Q3', '2018 - Q4',
       '2019 - Q1', '2019 - Q2', '2019 - Q3', '2019 - Q4', '2020 - Q1',
       '2020 - Q2', '2020 - Q3', '2020 - Q4'],
      dtype='object')

我想将这些转换为日期,以便我可以执行时间序列分析。

在索引中列出的标题之前还有一列。第一列具有不同的性质,不需要转换为日期。如何排除第一个标题?

此外,所有这些都是在下面的行中具有值的列标题(以防万一)。

标签: pythonpandasdatedatetime

解决方案


你可以这样做:

ix = pd.to_datetime(
    ser.index.str.replace(' ', '', regex=False), errors='coerce'
)

# or if your format would be more complicated, you might need regexp
ix = pd.to_datetime(
    ser.index.str.replace(r'(\d+) - Q(\d)', r'\1-Q\2', regex=True), errors='coerce'
)

ser2 = pd.Series(
    index=ix,
    data=ser.values
)

我假设原始系列是ser. 例如

ser = pd.Series(
    index=['2020 - Q2', '2020 - Q3', '2020 - Q4'],
    data=range(3)
)

我用这个答案来回答你的。

您可能希望使用季度的最后一天/最后一个工作日。在这种情况下,您可以使用 QuarterEnd / BQuarterEnd 之类的偏移量


推荐阅读