#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.