2013-11-28 2 views
1

У меня возникли проблемы с выбором данных в кадре данных в зависимости от часа.Выбор данных в течение одного часа в таймсере данных

У меня есть данные за несколько месяцев, которые увеличиваются с интервалом в 10 минут.

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

Это, как я это сделал, чтобы выбрать день:

x=all_data.resample('D').index 
for day in range(20): 

     c=x.day[day] 
     d=x.month[day] 
     print data['%(a)s-%(b)s-2009' %{'a':c, 'b':d} ] 

, но если я сделаю это за час, он не будет работать.

x=data['04-09-2009'].resample('H').index 

for hour in range(8): 
    daydata=data['4-9-2009 %(a)s' %{'a':x.hour[hour]}] 

Я получаю ошибку:

raise KeyError('no item named %s' % com.pprint_thing(item)) 
KeyError: u'no item named 4-9-2009 0' 

, которое истинно, как в формате дд/мм/YYY чч: мм: сс

Я уверен, что это должно быть легко и что-то делать с повторной выборкой. Беда в том, я не хочу ничего делать с ДАТ, просто выбрать фрейм данных (соотнести его впоследствии)

Приветствия

ответ

1

Вам не нужно ресэмплировать ваши данные, если вы не хотите, чтобы агрегировать в ежедневное значение (например, сумма, не более, медиана)

Если вы просто хотите, стоят определенного дня в данных, вы можете использовать в последующем пример атрибута .loc для начала работы:

import numpy as np 
import pandas 
N = 3700 
data = np.random.normal(size=N) 
time = pandas.DatetimeIndex(freq='10T', start='2013-02-15 14:30', periods=N) 
ts = pandas.Series(data=data, index=time) 
ts.loc['2013-02-16'] 

отличная вещь об использовании .loc во временном ряду - это то, что вы можете быть общим или конкретным, как вы хотите, с датами. Таким образом, для определенного часа, вы бы сказали:

ts.loc['2013-02-16 13'] # notice that i didn't put any minutes in there 

Кроме того, вы можете вытащить целый месяц с:

ts.loc['21013-02'] 

Этот вопрос вы испытываете со строкой форматирования, что вам» re вручную добавьте строку с помощью 0. Поэтому, если у вас есть 2-значный час (т. Е. Днем), вы получаете трехзначное представление часов (и это неверно). Так что, если я хотел перебрать определенный набор часов, я хотел бы сделать:

hours = [2, 7, 12, 22] 
for hr in hours: 
    print(ts.loc['2013-02-16 {0:02d}'.format(hr)]) 

Строка формата 02d сказать питону построить строку из digit (числа), которое является не менее двумя символами, и площадка строка с 0 с левой стороны, если необходимо. Также вам, вероятно, нужно отформатировать дату как YYYY-mm-dd, а не наоборот.

+0

ahh благодарит alot! это объясняет некоторую путаницу, которую я испытываю с индексацией в пандах. Одна небольшая проблема, которую я имею, заключается в том, что если вы не ставите '0' в, как говорят: daydata = data.loc ['4-9-2009 0% (a) s'% {'a': hour}]' Я получаю сообщение об ошибке. Есть ли способ заставить нуль? –

+0

@AshleighClayton посмотреть мои правки –

Смежные вопросы