pandas tzinfo, потерянный combine_first

#python #pandas

#python #pandas

Вопрос:

Я понял, что в некоторых моих фреймах данных отсутствует tzinfo, и определил, что combine_first удаляет его. Я привел короткий пример:

 df1 = pd.DataFrame(columns=['UTCdatetime','abc'],
                  data=pd.to_datetime('20100101 01:01').tz_localize('UTC'),
                  index=pd.date_range('20140627', periods=1))
print(df1)
df2 = pd.DataFrame(columns=['UTCdatetime','xyz'],
                  data=pd.to_datetime('20121212 12:12').tz_localize('UTC'),
                  index=pd.date_range('20140628', periods=1))
print(df2)
df1 = df2[['UTCdatetime']].combine_first(df1)
print(df1)
  

Вывод:

                           UTCdatetime                        abc
2014-06-27  2010-01-01 01:01:00 00:00  2010-01-01 01:01:00 00:00
                          UTCdatetime                        xyz
2014-06-28  2012-12-12 12:12:00 00:00  2012-12-12 12:12:00 00:00
                   UTCdatetime                        abc
2014-06-27 2010-01-01 01:01:00  2010-01-01 01:01:00 00:00
2014-06-28 2012-12-12 12:12:00                        NaN
  

До combine_first все даты и время показывают UTC. Однако, как только я делаю combine_first, 00:00 (например, UTC) отсутствует, хотя сами времена в порядке.

Я использую pandas 0.14.0. Есть ли какой-либо способ избежать потери tzinfo?

В связи с этим, есть ли простой способ программно определить, есть ли tzinfo? Выполнение tz_localize вызывает исключение, если оно уже есть, и tz_convert вызывает исключение, если это не так. Спасибо!

Комментарии:

1. хм, это похоже на ошибку, смотрите здесь: github.com/pydata/pandas/issues/7630

2. Спасибо Джеффу. Очень некрасиво, но я смог заменить необходимую мне функциональность, используя df1.ix[df2.index,'UTCdatetime'] = df2.ix[df2.index,'UTCdatetime'] после первого объединения индексов в df1.index.