2013-02-14 2 views
2

Я читаю некоторые данные журнала csv из файла и используя поля даты, времени как индекс кадра. Когда я рисую временные ряды, абсолютное время отображается по оси X. Я хочу показать время по оси X относительно времени начала. Как это сделать?pandas timeseries время использования относительно начала

Например: вот пример оси х:

23:59:57--------+23:59:58----------23:59:59--------+00:00:00--------------+ 

Я хочу, чтобы это так:

0---------00:00:01----------00:00:02--------+00:00:03--------------+ 

ответ

3

Простое решение вычесть первый индекс-элемент из индекса. Это можно сделать, используя понимание списка, которое может быть не самым лучшим (самым быстрым) вариантом, если ваш Dataframe очень большой.

begin = pd.datetime(2013,1,5,5,53) 
end = pd.datetime(2013,1,7,7,16) 

rng = pd.DatetimeIndex(start=begin, end=end, freq=pd.datetools.Minute(15)) 
df = pd.DataFrame(np.random.randn(rng.size), index=rng) 

fig, axs = plt.subplots(2,1, figsize=(15,6)) 
fig.subplots_adjust(hspace=.5) 

df.plot(ax=axs[0]) 
axs[0].set_title('Original') 

df.index = [idx - df.index[0] for idx in df.index] 
df.plot(ax=axs[1]) 
axs[1].set_title('Normalized') 

enter image description here

+0

Отлично, спасибо. Я пробовал аналогичный подход после прочтения dataframe из csv: df.date_time = df.date_time - df.date_time [0], который ошибочно сказал, что объект «Timestamp» не имеет атрибута «dtype». Сейчас я попробую ваше решение. –

+0

@Rutger_Kassies Я вижу, что выполнение df.index = [idx - df.index [0] для idx в df.index] изменяет тип данных индекса на объекты вместо DatetimeIndex, который меняет вывод графика. Я вывешу выходное изображение как отдельный ответ, чтобы вы поняли, что происходит. Я буду исследовать себя, чтобы исправить это, но опубликовать его здесь, если у вас есть какая-либо подсказка. –

2

Here is the output after I did relative time normalization

Поскольку тип данных индексов изменяется от DatetimeIndex к объектам, каждая строка печатается в отдельном ведре.

+1

Проблема исправлена, выполнив следующее: start_t = pd.tslib.Timestamp (df.index [0] .date()) df.index = [pd.tslib.Timestamp (start_t + (idx - df.index [0])) для idx в df.index] –