2015-08-15 4 views
1

Я новичок в использовании python pandas и имею следующий сценарий, чтобы вытащить данные временных рядов из файла excel, установить даты = индекс, а затем захочет выполнить различные вычисления на привязка данных по дате. Сценарий:Индекс по диапазонам дат в Python Pandas

df = pd.read_excel("myfile.xls") 
df = df.set_index(df.Date) 
df = df.drop("Date",1) 
df.index.name = None 
df.head() 

Выход из этого (чтобы дать вам ощущение данных) является:

   Px1  Px2  Px3 Px4  Px5  Px6   Px7  
2015-08-12 19.850000 10.25 7.88 10.90 109.349998 106.650002 208.830002 
2015-08-11 19.549999 10.16 7.81 10.88 109.419998 106.690002 208.660004 
2015-08-10 19.260000 10.07 7.73 10.79 109.059998 105.989998 210.630005 
2015-08-07 19.240000 10.08 7.69 10.92 109.199997 106.430000 207.919998 
2015-08-06 19.250000 10.09 7.76 10.96 109.010002 106.010002 208.350006 

При попытке извлечь данные, основанные на одной дате, как df.loc['20150806'], который работает, но когда я попробуйте извлечь фрагмент, как df.loc['20150806':'20150812'] Я возвращаю Empty DataFrame.

Опять же, индекс является DateTimeIndex с «datetime64 [нс]» DTYPE =, длина = 1412, частота = Ни, TZ = Ни

Как я уже сказал, моя конечная цель состоит в том, чтобы быть в состоянии группы в данные по дням, месяцам, годам, различным периодам и т. д., а также выполнять расчеты по данным. Я хочу дать этот контекст, но даже не хочу вникать в это, потому что я явно застрял в чем-то более базовом - возможно, неправильно понимая, как работать с DateTimeIndex

Спасибо.

РЕДАКТИРОВАТЬ: Я думаю, что основная проблема, на которую я ссылался на индексирование, имеет какое-то отношение к freq = 0, bc, когда я пробовал более простые примеры со смежными сериями дат, у меня не было этой проблемы.

+1

Ваш индекс не отсортирован, или, по крайней мере, он уменьшается, а не увеличивается. Вот почему нарезка возвращает пустой кадр данных (12-й август до 6-го августа в кадре) – joris

+0

Попробуйте 'df = df.sort_index()', а затем попробуйте снова нарезать. – joris

+0

Развернувшись на том, что предлагает @joris, вы также можете срезать путем изменения порядка одним из двух способов: 'df.loc ['2015-08-12': '2015-08-10']' или 'df.loc ['2015-08-10': '2015-08-12': - 1] 'Но без явного сортировки (хорошее предложение, конечно) не обязательно подразумевается, что результаты среза также будут отсортированы. Вы эффективно выполняете кусочек стиля «iloc». – JohnE

ответ

0

df.loc['2015-08-12':'2015-08-10'] и df.loc['2015-08-10':'2015-08-12':-1] обе произведение. df = df.sort_index() и нарезка, как я пытался работать. Спасибо вам всем. Мне не хватало леса для деревьев.