我看了很多线程,但无法解决我的问题。我的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')
我想把这些转换成日期,这样我就可以进行时间序列分析。
在索引中列出的标题之前还有一列。第一列有不同的性质,没有;不需要转换为日期。如何排除第一个标头?
此外,所有这些都是在下面的行中具有值的列标题(如果这有帮助的话(。
您可以这样做:
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-Q2', 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 等偏移