【问题标题】:how to match datetime[ns] and datetime[D]如何匹配 datetime[ns] 和 datetime[D]
【发布时间】:2016-01-29 17:36:37
【问题描述】:

我使用 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?

【问题讨论】:

    标签: python datetime pandas unicode


    【解决方案1】:

    您可以使用列表和字典推导来生成以年份为关键字的字典。

    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,dtype:datetime64[ns]。节假日也不包括在内。因为我想用数据和价格来做一些情节。
    • 明确地说,您希望结果为格式化文本(不再是时间戳)?如果是这样,只需这样做:` {yr: [d.strftime('%Y-%m-%d') for ...`
    • 抱歉,我仍然希望日期为 dtype:datetime64。你知道怎么做吗?
    • [d.to_datetime64() for d in dates...]?结果为 numpy.datetime64 类型。
    • 非常感谢。我想我现在可以在你的帮助下解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 2017-01-05
    • 2019-03-29
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多