Python datetime- Получить интервал дат в кадре данных - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть набор данных в следующем формате:

date_time,open,close,... 
2012-02-01,1307.25,1320.5,...
2012-02-03,1322.5,1339.5,...
....

Эти данные находятся в файле с именем Dataset.csv. Я читаю это следующим образом:

#This is the whole data. I will use it only later  
self.data= pd.read_csv('./dataset/Dataset.csv')

#I will get only the indices from date_time columns. This is what I 
#want now
self.sp = pd.read_csv('./dataset/Dataset.csv')

#Set index
self.sp = self.sp.set_index('date_time')

#save indices
self.sp = self.sp.index 

если я печатаю self.sp, вот что я получаю

Index(['2012-02-01', '2012-02-02', '2012-02-03', '2012-02-06', '2012-02-07',
   '2012-02-08', '2012-02-09', '2012-02-10', '2012-02-13', '2012-02-14',
   ...
   '2019-08-19', '2019-08-20', '2019-08-21', '2019-08-22', '2019-08-23',
   '2019-08-26', '2019-08-27', '2019-08-28', '2019-08-29', '2019-08-30'],
  dtype='object', name='date_time', length=1960)

Я хотел бы получить интервал значений в соответствии с date_time столбец с учетом даты начала и интервала дат как следующий:

#The initial date
begin=datetime.datetime(2012,2,1,0,0,0,0)

#The total number of days I will get from the dataset is 360, starting  
#from the date in the  
#begin variable 
trainSize=datetime.timedelta(days=360*1).days

#The TrainMinLimit will be loaded as the initial date
#If the initial date cannot be used, add 1 day to the initial date and 
#consider it as the initial date

trainMinLimit=None

while(trainMinLimit is None):
        try:
            trainMinLimit = self.sp.get_loc(begin)
        except:
            begin+=datetime.timedelta(1,0,0,0,0,0,0)

#The TrainMaxLimit will be loaded as the interval between the initial date plus the training 
#size. If the initial date cannot be used, add 1 day to the initial date and consider it the 
#initial date    

trainMaxLimit=None

while(trainMaxLimit is None):
        try:
            trainMaxLimit = self.sp.get_loc(begin+trainSize)
        except:
            begin+=datetime.timedelta(1,0,0,0,0,0,0)

Когда я запускаю этот код, у меня появляется следующая ошибка:

    trainMinLimit = self.sp.get_loc(begin)
    File "/usr/local/lib/python3.5/dist-packages/pandas/core/indexes/base.py", line 2659, in 
    get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))
    File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
    File "pandas/_libs/index.pyx", line 127, in pandas._libs.index.IndexEngine.get_loc
    File "pandas/_libs/index.pyx", line 153, in 
    pandas._libs.index.IndexEngine._get_loc_duplicates
    File "pandas/_libs/index.pyx", line 170, in 
    pandas._libs.index.IndexEngine._maybe_get_bool_indexer
    KeyError: datetime.date(2012, 2, 1)

Здесь Python не понимает в get_lo c (), как формат переменной начала (datetime) может индексировать дата-фрейм дат. Как я могу использовать переменную datetime, чтобы получить позицию, в которой она находится в dataframe pandas?

edit: Как и предполагалось, я попытался преобразовать индекс в формат даты и времени следующим образом:

self.sp = pd.read_csv('./dataset/Dataset.csv') 
self.sp = self.sp.set_index('date_time')
self.sp = pd.to_datetime(self.sp.index)

И у меня появляется следующая ошибка:

self.sp = pd.to_datetime(self.sp.index)
File "/usr/local/lib/python3.5/dist- 
packages/pandas/core/tools/datetimes.py", line 603, in to_datetime
result = convert_listlike(arg, box, format)
File "/usr/local/lib/python3.5/dist- 
packages/pandas/core/tools/datetimes.py", line 302, in 
_convert_listlike_datetimes
allow_object=True)
File "/usr/local/lib/python3.5/dist- 
packages/pandas/core/arrays/datetimes.py", line 1866, in 
objects_to_datetime64ns
raise e
File "/usr/local/lib/python3.5/dist- 
packages/pandas/core/arrays/datetimes.py", line 1857, in 
objects_to_datetime64ns
require_iso8601=require_iso8601
File "pandas/_libs/tslib.pyx", line 460, in 
pandas._libs.tslib.array_to_datetime
File "pandas/_libs/tslib.pyx", line 685, in 
pandas._libs.tslib.array_to_datetime
File "pandas/_libs/tslib.pyx", line 809, in 
pandas._libs.tslib.array_to_datetime_object
File "pandas/_libs/tslib.pyx", line 803, in 
pandas._libs.tslib.array_to_datetime_object
File "pandas/_libs/tslibs/parsing.pyx", line 99, in 
pandas._libs.tslibs.parsing.parse_datetime_string
File "/usr/local/lib/python3.5/dist- 
packages/dateutil/parser/_parser.py", line 1374, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "/usr/local/lib/python3.5/dist- 
packages/dateutil/parser/_parser.py", line 649, in parse
raise ParserError("Unknown string format: %s", timestr)
dateutil.parser._parser.ParserError: Unknown string format: date_time
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...