Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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 如何匹配datetime[ns]和datetime[D]_Python_Datetime_Pandas_Unicode - Fatal编程技术网

Python 如何匹配datetime[ns]和datetime[D]

Python 如何匹配datetime[ns]和datetime[D],python,datetime,pandas,unicode,Python,Datetime,Pandas,Unicode,我使用pandas来读取日期列表,范围从1982年到2015年,仅包括工作日,类型为datetime[ns]。我想把大名单分成小名单,一年一组。我所做的是: list_Date = [] list_Close = [] for i in range(1982,2016): dateONEyear = [] CloseOneyear = [] date = np.arange(str(i),str(i+1),dtype='datetime64[D]') for ii

我使用pandas来读取日期列表,范围从1982年到2015年,仅包括工作日,类型为datetime[ns]。我想把大名单分成小名单,一年一组。我所做的是:

list_Date = []
list_Close = []
for i in range(1982,2016):
    dateONEyear = []
    CloseOneyear = []
    date = np.arange(str(i),str(i+1),dtype='datetime64[D]')
    for ii,jj in zip(AAPL['Date'],AAPL['Close']):
        if str(ii) in date:
            dateBYyear.append(ii)
            CloseOneyear.append(jj)
    list_Date.append(dateONEyear)
    list_Close.append(CloseOneyear)
但它不起作用。我的问题是:

1) 如何匹配这两种不同的数据类型

2) 或者,有谁有更好的办法按一年的单位对数据进行分组


3) 我可以使用其他方法读取日期列表,但类型是unicode,如何将unicode与datetime64匹配

您可以使用列表和词典理解来生成一本键入年度的词典

dates = pd.date_range('1982-1-1', '2016-1-28', freq='B')
date_dict = {yr: [d for d in dates if d.year == yr] 
                 for yr in range(dates[0].year, dates[-1].year + 1)}

>>> dates_dict[2016]
[Timestamp('2016-01-01 00:00:00', offset='B'),
 Timestamp('2016-01-04 00:00:00', offset='B'),
 Timestamp('2016-01-05 00:00:00', offset='B'),
 Timestamp('2016-01-06 00:00:00', offset='B'),
 Timestamp('2016-01-07 00:00:00', offset='B'),
 Timestamp('2016-01-08 00:00:00', offset='B'),
 Timestamp('2016-01-11 00:00:00', offset='B'),
 Timestamp('2016-01-12 00:00:00', offset='B'),
 Timestamp('2016-01-13 00:00:00', offset='B'),
 Timestamp('2016-01-14 00:00:00', offset='B'),
 Timestamp('2016-01-15 00:00:00', offset='B'),
 Timestamp('2016-01-18 00:00:00', offset='B'),
 Timestamp('2016-01-19 00:00:00', offset='B'),
 Timestamp('2016-01-20 00:00:00', offset='B'),
 Timestamp('2016-01-21 00:00:00', offset='B'),
 Timestamp('2016-01-22 00:00:00', offset='B'),
 Timestamp('2016-01-25 00:00:00', offset='B'),
 Timestamp('2016-01-26 00:00:00', offset='B'),
 Timestamp('2016-01-27 00:00:00', offset='B'),
 Timestamp('2016-01-28 00:00:00', offset='B')]

非常感谢你。这很有启发性。但是我想用这样的格式记录日期。1982-01-11 1982-01-08 1982-01-07 1982-01-06 1982-01-05 1982-01-04,数据类型:datetime64[ns]。节假日也不包括在内。因为我想使用数据和价格来绘制一些图。为了清楚起见,您希望结果是格式化文本(不再是时间戳)?如果是这样,就这样做:`{yr:[d.strftime(“%Y-%m-%d”)for…`对不起,我仍然希望日期是dtype:datetime64。你知道怎么做吗?
[d.to_datetime64()for d in dates…]
?结果是numpy.datetime64类型。非常感谢。我想在你的帮助下,我现在可以解决这个问题了。