2015-02-17 4 views
4

Я пытаюсь получить индекс времени в виде кадра данных как серию, но, похоже, он отбрасывает часовой пояс, когда я вызываю метод to_series. Ниже приведен пример. Является ли это ошибкой или я что-то неправильно делаю?Pandas Timezone Aware Index Drops Timezone При преобразовании в ряд

rows = 50 
df = pd.DataFrame(np.random.randn(rows,2), columns=list('AB'), index=pd.date_range('1/1/2000', periods=rows, freq='1H', tz=pytz.UTC)) 

print df.index[-1] 
# 2000-01-03 01:00:00+00:00 

print df.index.to_series()[-1] 
# 2000-01-03 01:00:00 


print df.index[-1].tzinfo 
# UTC 

print df.index.to_series()[-1].tzinfo 
#None 

ответ

2

Нет, вы не делаете что-то неправильно, и это не ошибка.
Это известное ограничение . of pandas/numpy: данные о времени и времени, относящиеся к данным, поддерживаются только в индексе. В серии данные хранятся в виде numpy datetime64 типов, которые не поддерживают часовые пояса. Существует открытый вопрос для добавления этой функции часового пояса также серии: https://github.com/pydata/pandas/issues/8260

Обходной путь для хранения данных, как object DTYPE вместо datetime64 (тогда они будут сохранены в качестве Timestamp объектов, подкласс datetime.datetime). Это позволит вам сохранить информацию о часовом поясе.
to_series имеет аргумент в keep_tz ключевое слово, чтобы получить это (см docstring):

In [34]: df = df.tz_convert('US/Eastern') 

In [35]: df.index.to_series()[-1] 
Out[35]: Timestamp('2000-01-03 01:00:00') 

In [36]: df.index.to_series(keep_tz=True)[-1] 
Out[36]: Timestamp('2000-01-02 20:00:00-0500', tz='US/Eastern', offset='H') 
Смежные вопросы