2015-11-04 3 views
1

У меня есть большой файл csv с данными временной метки в формате iso 2015-04-01 10:26:41. Данные охватывают несколько месяцев с записями от 30 секунд до нескольких часов. Это столбцы id, время, скорость.группа pandas временные ряды данных с использованием определенных временных интервалов

В конечном счете, я хочу сгруппировать данные с интервалом в 15 минут, а затем вычислить среднюю скорость, поскольку любое количество записей находится в 15-минутном временном интервале.

Я пытаюсь использовать Pandas, потому что кажется, что у него твердые инструменты серии времени, и это может быть легко сделать, но я падаю на первое препятствие.

До сих пор я импортировал CSV в качестве кадра данных, и все столбцы имеют dtype object. Я отсортировал данные по дате, и теперь я пытаюсь сгруппировать записи по временному интервалу, в котором я боюсь. Основанный на поиске google, я попытался использовать resample данные с помощью этого кода df.resample('5min', how=sum) Здесь я получаю ошибку TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex. Я думал о том, чтобы попробовать метод groupby, возможно, используя lambda, как в df.groupby(lambda x:x.minutes + 5), который вызывает ошибку AttributeError: 'str' object has no attribute 'minutes'.

В основном я немного запутался, а) имеет ли панды данные временных рядов в формате он признающего, как это dtype является object, и б) если оно может распознать его, я не могу показаться, чтобы получить временные интервалы.

Стремитесь узнать, может ли кто-нибудь указать мне в правильном направлении.

DF выглядит следующим образом

 0  1     2  3  
0   id boat_id     time speed  
1  386226  32 2015-01-15 05:14:32  4.2343243  
2  386285  32 2015-01-15 05:44:57  3.45234 

ответ

2

Во-первых, это выглядит, как вы читаете пустую строку. Вероятно, вы захотите пропустить первую строку в вашем файле pd.read_csv(filename, skiprows=1).

Вы должны преобразовать текстовое представление времени в DatetimeIndex, используя pd.to_datetime().

df.set_index(pd.to_datetime(df['time']), inplace=True) 

Затем вы должны иметь возможность повторной калибровки.

df.resample('15min', how=np.mean) 
0

Ответ Александра правильный; также учтите, что вы можете сделать

df = pd.read_csv('myfile.csv', parse_dates=True) 

И ваш столбец даты должен иметь тип даты и времени, если формат является нормальным. Затем вы можете установить индекс и повторную выборку, как указано выше.

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