Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 制作大熊猫DatetimeIndex的月份和年份列表_Python_List_Pandas_Dataframe_Strftime - Fatal编程技术网

Python 制作大熊猫DatetimeIndex的月份和年份列表

Python 制作大熊猫DatetimeIndex的月份和年份列表,python,list,pandas,dataframe,strftime,Python,List,Pandas,Dataframe,Strftime,我有一个信息的数据框架。我将索引设置为接收日期和时间。现在我要一份清单 我通过以下方式设置df索引: df.index = pd.to_datetime(df.index, format='%m/%d/%Y %H:%M') 这就给了我: print df.index <class 'pandas.tseries.index.DatetimeIndex'> [2014-07-28 09:42:08, ..., 2015-07-28 09:06:12] Length: 15177, F

我有一个信息的数据框架。我将索引设置为接收日期和时间。现在我要一份清单

我通过以下方式设置df索引:

df.index = pd.to_datetime(df.index, format='%m/%d/%Y %H:%M')
这就给了我:

print df.index
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-07-28 09:42:08, ..., 2015-07-28 09:06:12]
Length: 15177, Freq: None, Timezone: None
但这给了我一个错误
DataError:没有要聚合的数值类型

原始答案 以下操作应该可以工作:将datetimeindex转换为,这样您就可以调用
apply
并使用返回字符串数组:

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()


最新答案 事实上,两年后再看这个问题,我意识到上面所说的完全没有必要。您只需执行以下操作:

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')
[10]中的

df.index.strftime(“%Y-%b”)
出[10]:
数组(['2014-1月'、'2014-2月'、'2014-3月'、'2014-4月'、'2014-5月',
“2014年6月”、“2014年7月”、“2014年8月”、“2014年9月”、“2014年10月”,
“2014年11月”、“2014年12月”、“2015年1月”、“2015年2月”、“2015年3月”,
“2015年4月”、“2015年5月”、“2015年6月”、“2015年7月”、“2015年8月”,
“2015年9月”、“2015年10月”、“2015年11月”、“2015年12月”、“2016年1月”,
‘2016年2月’、‘2016年3月’、‘2016年4月’、‘2016年5月’、‘2016年6月’,
“2016年7月”、“2016年8月”、“2016年9月”、“2016年10月”、“2016年11月”,
‘2016年12月’、‘2017年1月’、‘2017年2月’、‘2017年3月’、‘2017年4月’,
“2017年5月”、“2017年6月”、“2017年7月”],

dtype='从pandas 1.0.x(2020)开始,您可以直接执行此操作。您可以以任意频率生成任意格式的文件,然后将其转换为任意格式。所有内容都在一行中:

>>> pd.date_range(start='7/2019', end='6/2020', freq='M').strftime('%Y-%b')
Index(['2019-Jul', '2019-Aug', '2019-Sep', '2019-Oct', '2019-Nov', '2019-Dec',
       '2020-Jan', '2020-Feb', '2020-Mar', '2020-Apr', '2020-May'],
      dtype='object')
但是你真的想要一个日期时间列表吗?我怀疑你想要一个pandas DatetimeIndex或系列,特别是如果它是用来用
.loc[]
对索引进行切片的,当你说“为了使用它们进行绘图”时,我怀疑你想要实际的日期时间用
.loc[]
,而不仅仅是绘图时间轴的字符串标签。
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')
>>> pd.date_range(start='7/2019', end='6/2020', freq='M').strftime('%Y-%b')
Index(['2019-Jul', '2019-Aug', '2019-Sep', '2019-Oct', '2019-Nov', '2019-Dec',
       '2020-Jan', '2020-Feb', '2020-Mar', '2020-Apr', '2020-May'],
      dtype='object')