原始回答
以下方法应该可行:将您的datetimeindex转换为系列, 这样您就可以调用apply
并使用strftime
返回一个字符串数组:
In [27]:
import datetime as dt
import pandas as pd
df = pd.DataFrame(index=pd.date_range(start = dt.datetime(2014,1,1), end = dt.datetime.now(), freq='M'))
df.index.to_series().apply(lambda x: dt.datetime.strftime(x, '%b %Y'))
Out[27]:
2014-01-31 Jan 2014
2014-02-28 Feb 2014
2014-03-31 Mar 2014
2014-04-30 Apr 2014
2014-05-31 May 2014
2014-06-30 Jun 2014
2014-07-31 Jul 2014
2014-08-31 Aug 2014
2014-09-30 Sep 2014
2014-10-31 Oct 2014
2014-11-30 Nov 2014
2014-12-31 Dec 2014
2015-01-31 Jan 2015
2015-02-28 Feb 2015
2015-03-31 Mar 2015
2015-04-30 Apr 2015
2015-05-31 May 2015
2015-06-30 Jun 2015
Freq: M, dtype: object
如果您想要一个列表,只需调用
tolist()
:
df.index.to_series().apply(lambda x: dt.datetime.strftime(x, '%b %Y')).tolist()
更新的回答
事实上,两年后看到这个问题,我意识到以上内容完全是不必要的。您只需要执行以下操作:
In [10]:
df.index.strftime('%Y-%b')
Out[10]:
array(['2014-Jan', '2014-Feb', '2014-Mar', '2014-Apr', '2014-May',
'2014-Jun', '2014-Jul', '2014-Aug', '2014-Sep', '2014-Oct',
'2014-Nov', '2014-Dec', '2015-Jan', '2015-Feb', '2015-Mar',
'2015-Apr', '2015-May', '2015-Jun', '2015-Jul', '2015-Aug',
'2015-Sep', '2015-Oct', '2015-Nov', '2015-Dec', '2016-Jan',
'2016-Feb', '2016-Mar', '2016-Apr', '2016-May', '2016-Jun',
'2016-Jul', '2016-Aug', '2016-Sep', '2016-Oct', '2016-Nov',
'2016-Dec', '2017-Jan', '2017-Feb', '2017-Mar', '2017-Apr',
'2017-May', '2017-Jun', '2017-Jul'],
dtype='<U8')
datetimeindex
支持直接使用.dt
访问器,无需转换为Series
.loc[]
切片索引。当你说“为了用于绘图”时,我怀疑你想要实际的日期时间来使用.loc[]
进行切片,而不仅仅是绘图时间轴的字符串标签。 - smci