Индексируйте некоторые строки с диапазоном дат в пандах Python - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть фрейм данных, который индексируется по датам (год и время до секунд), и я хотел бы получить строки, которые соответствуют определенному периоду времени, который я вычисляю. Однако я не могу избавиться от ключевой ошибки при индексации с типом datetime или str. Код выглядит следующим образом:

def get_series(self, id_dataset, time=None):
    if time == None:
        time = dt.datetime.now()
    time = time.replace(second=0, microsecond=0)

    dataframe_global = pandas.read_csv('../rsc/datasets/' + str(id_dataset).replace(":", "_") + '.csv',
                                       delimiter=',')

    dataframe_global['timestamp_index'] = pandas.to_datetime(dataframe_global['timestamp'])
    dataframe_global = dataframe_global.set_index('timestamp_index')
    # dataframe_global = pandas.read_csv('../rsc/datasets/historic4.csv', delimiter=',')

    previous_measures = []
    for diff in self.difference_times:
        time1 = last_time - dt.timedelta(minutes=(diff - 30))
        time2 = last_time - dt.timedelta(minutes=(diff + 30))

        ind = str(time2.isoformat(sep=' '))
        ind2 = str(time1.isoformat(sep=' '))
        prev = dataframe_global[ind:ind2]

Keyerror появляется в последней строке кода.

Значения:

last_time = datetime (2018-07-04 16: 55: 59.02000)

время = дата / время (2018-07-04 17: 09: 59.02000)

время2 = дата / время (2018-07-04 16: 39: 59.02000)

ind = '2018-07-04 16: 39: 59.02000'

in2 = '2018-07-04 17: 09: 59.02000'

Есть какие-нибудь намеки?

Спасибо!

1 Ответ

0 голосов
/ 12 сентября 2018

Ваши индексаторы, вероятно, определены неправильно. Мы не можем сказать наверняка, потому что вы не включили значения last_time или ind / ind2.

Помните, что если вы строите индекс datetime только из Timestamp, будет использоваться сегодняшняя дата, поскольку объект datetime должен указывать как дату, так и время. Ниже приведена демоверсия. Может быть достаточно использовать ind = str(time2) и ind2 = str(time1) напрямую.

df = pd.DataFrame([[0, 1, 2], [3, 4, 5], [6, 7, 8]],
                  index=['00:00:00', '20:10:20', '12:15:00'])

df.index = pd.to_datetime(df.index)

today = pd.to_datetime('today').date()
start_time = '10:00:00'
end_time = '22:00:00'

res = df[f'{today} {start_time}': f'{today} {end_time}']

print(res)

                     0  1  2
2018-09-12 20:10:20  3  4  5
2018-09-12 12:15:00  6  7  8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...