Дата и время выпуска панд - PullRequest
0 голосов
/ 28 июня 2018

У меня есть pandas dataframe с первым столбцом типа "datetime64 [ns]" на python3. Вот фрагмент моего кода:

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.core.indexes.range.RangeIndex' с этими индексаторами [2017-01-02 00:00:00] класса 'pandas._libs.tslib.Timestamp'

Я пытаюсь найти первый рабочий день года назад и определить количество рабочих дней между этими двумя датами.

Я думаю, что проблема может заключаться в том, что DataFrame имеет один тип формата времени, в то время как переменные, которые наиболее важны для дальнейших операций "last" и "dtvar", имеют значение datetime.datetime, которое мне нужно использовать. день недели () формула. Какой лучший способ справиться с датами в этом случае? Потому что я видел тысячи различных типов дат среди панд, numpy и datetime. Я новичок в Python, и как бы я ни старался, я не мог найти выход.

Большое спасибо заранее за любую помощь,

1 Ответ

0 голосов
/ 28 июня 2018

Фрейм данных не индексируется столбцом Date. Вам нужно будет set_index перед нарезкой.

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