日期时间转换问题熊猫

时间:2018-06-28 13:29:11

标签: python-3.x pandas datetime timestamp weekday

我在python3上有一个熊猫数据框,其第一列的类型为“ datetime64 [ns]”。 这是我的代码段:

import pandas as pd
import numpy as np
from pandas.tseries.offsets import BDay
import datetime as dt

d = {'Date': [np.datetime64('2017-12-31','ns'), np.datetime64('2018-01-01','ns'), np.datetime64('2018-01-02','ns'), np.datetime64('2018-01-03','ns')], 
     'Prices': [9.62, 9.5, 9.73, 9.45]}
analytics = pd.DataFrame(data=d)
analytics['Date'] = pd.to_datetime(analytics['Date'], format='%Y-%m-%d')
Eyear = 2018
Emonth = 1
Eday = 3
###days
#last day
last = dt.datetime(Eyear, Emonth, Eday)
#1y
dtvar = dt.datetime(Eyear-1, Emonth, Eday)

yr1 = dtvar - BDay(1) if (dtvar.weekday() == 5 or dtvar.weekday() == 6) else dtvar
yr1_plus1 = yr1 + BDay(1)
yr1ct = len(analytics[yr1_plus1:last])

print(yr1ct)

我不断出现此错误:

TypeError:无法使用类'pandas._libs.tslib.Timestamp'的这些索引器[2017-01-02 00:00:00]在类'pandas.core.indexes.range.RangeIndex'上进行切片索引

我正在尝试查找一年前的第一个工作日,并查找这两个日期之间的工作日数。

我认为问题可能在于DataFrame具有一种时间格式,而对于进一步操作“ last”和“ dtvar”而言最重要的变量是datetime.datetime,我需要使用。工作日()公式。 在这种情况下处理日期的最佳方法是什么? 因为我已经在熊猫,numpy和datetime中看到成千上万种不同的日期类型。我对python很陌生,无论我多么努力,都找不到出路。

非常感谢您的帮助,

1 个答案:

答案 0 :(得分:1)

该数据帧没有被Date列索引。切片之前,您需要set_index

>>> analytics.set_index("Date")[yr1_plus1:last]