2015-11-24 2 views
0

У меня есть панд dataframe (названный ей) и один из столбцов (дата) является TIMESTAMPприменения лямбда к TZ-Aware метка времени

s.date[0] 
Out[126]: 
Timestamp('2014-01-28 00:52:00-0500', tz='dateutil//usr/share/zoneinfo/America/New_York') 

В какой-то момент в коде нужно выбрать подмножество s (используя idx, список логических элементов). Выход:

s.date[idx] 
Out[125]: 
1019 2014-12-01 00:52:00-05:00 
1020 2014-12-01 01:52:00-05:00 
1021 2014-12-01 02:52:00-05:00 
Name: date, dtype: datetime64[ns, tzfile('/usr/share/zoneinfo/America/New_York')] 

Поскольку я заинтересован только в час, я думал, что я просто не мог сделать:

s.date.hour 

, но, конечно, я получаю ошибку

AttributeError: 'Series' object has no attribute 'hour' 

Думая, что можно сделать:

s.date[0].hour 
Out[128]: 0 

I сказал, позвольте мне использовать лямбда, чтобы применить .hour к каждой «строке». Таким образом:

s.date[idx].apply(lambda x: x.hour) 
Out[129]: 
1019  5 
1020  6 
1021  7 

Как вы можете видеть, я не получаю время в «Восточном времени», а скорее в формате UTC.

Я сделал поиск в Интернете, но ничего ... Есть ли способ получить не-UTC час?

Спасибо!

+0

Используйте '.dt' аксессор ... – Kartik

ответ

0

Использование панды 0.16.2, у меня не было проблем с получением местного времени США Восточный от TZ осведомленных метки времени.

s = pd.Series(pd.date_range('20130101 09:10:12', periods=4, tz='US/Eastern', freq='H')) 

>>> s 
0 2013-01-01 09:10:12-05:00 
1 2013-01-01 10:10:12-05:00 
2 2013-01-01 11:10:12-05:00 
3 2013-01-01 12:10:12-05:00 
dtype: object 

>>> s.dt.hour 
0  9 
1 10 
2 11 
3 12 
dtype: int64 

Он также отлично работал с индексированием.

idx = [1, 3] 
>>> s.ix[idx].dt.hour 
1 10 
3 12 
dtype: int64 
+0

Интересный ... я знал о команде дт, но она не работает. Оказывается, что, делая время tz-aware, используя «Америку/Нью-Йорк», dt не работает. Если я, с другой стороны, использую «EST», он работает. Это ожидаемое поведение – anr

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

  • Нет связанных вопросов^_^