Итерация через DateTimeIndex в Pandas

У меня есть Pandas DataFrame с индексом, который представляет собой серию последовательных дат. Я пытаюсь перебрать даты, но мне выдается KeyError, где я знаю, что указанный ключ существует и находится в правильном формате (Pandas Timestamp)

import pandas as pd
import datetime

## Importing the data from the Sep 2016-August 2018
## Step count & Date features only

features = ['Date','Step count']
data = pd.read_csv('fit_daily_sum_Sep2016_Aug2018.csv', sep=',', usecols=features).set_index('Date')
# To convert data index to datetime
data.index = pd.to_datetime(data.index)

tmp = data.head()
print tmp.index
print 'first key',tmp.index[0]
print type(tmp.index[0])

fkey = pd.Timestamp(2016,9,2)
print 'fkey is',fkey
for x in xrange(0, len(tmp)):
    print 'running',fkey+datetime.timedelta(days=x)
    print tmp[fkey+datetime.timedelta(days=x)]

Первая итерация последней строки вызывает ошибку KeyError. Консоль выглядит так, как показано ниже (в сжатом виде)

DatetimeIndex(['2016-09-02', '2016-09-03', '2016-09-04', '2016-09-05',
           '2016-09-06'],
          dtype='datetime64[ns]', name=u'Date', freq=None)
first key 2016-09-02 00:00:00
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
fkey is 2016-09-02 00:00:00
running 2016-09-02 00:00:00
KeyError: Timestamp('2016-09-02 00:00:00')

Мне кажется, что я использую точный ключ, который, как я знаю, существует, но выдает ошибку KeyError! Я не уверен, в чем проблема. Любая помощь будет принята с благодарностью.

Вам не нужно использовать здесь цикл, не могли бы вы включить образец своего фрейма данных, а также желаемый фрейм данных вывода в свой пост?

rahlf23 25.10.2018 05:27
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
1 706
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
tmp[fkey+datetime.timedelta(days=x)]

Эта часть смотрит на заголовок столбца вашего фрейма данных, а не на индекс.

Пытаться

tmp.loc(fkey+datetime.timedelta(days=x))

или

tmp['Step count'][fkey+datetime.timedelta(days=x)]
#where 'Step count' is the column name of interest.

Это почти правильно! Я предполагаю, что это сработало бы, если бы tmp был серией Pandas, но на самом деле это DataFrame. Итак, способ заставить это работать - это tmp ['Step count'] [fkey + datetime.timedelta (days = x)], где 'Step count' - имя интересующего столбца. Или сделайте то же самое, используя функцию loc, как вы предложили

cshadowstar 25.10.2018 06:23

Если вы отредактируете свой ответ, указав приведенную выше информацию, я буду рад отметить его как правильный, поскольку суть вашего ответа привела меня к этому решению!

cshadowstar 25.10.2018 06:23

Другие вопросы по теме