У меня есть датафрейм с эпохой. Я конвертирую время эпохи в отметку времени с моим местным часовым поясом. Я хотел бы удалить информацию о часовом поясе, но сохранить свой локальный часовой пояс в отметке времени (вычесть смещение часового пояса из отметки времени, а затем удалить часовой пояс). Это код, который у меня есть:
epochs = np.arange(1644516000, 1644516000 + 1800*10, 1800)
df = pd.DataFrame({'time': epochs})
df['time'] = pd.to_datetime(df['time'], unit='s').dt.tz_localize("US/Pacific")
Я не могу использовать:
dt.tz_localize(None)
Так как он преобразует его обратно в UTC.
Мой желаемый результат - это временная метка без информации о часовом поясе, но в моем местном часовом поясе:
pd.date_range('2022-02-10 10:00', freq='30min', periods=10)
Как мне это сделать?
Это работает! Спасибо. Вы хотите опубликовать это как ответ, чтобы я мог принять его?
По сути, вы пытаетесь получить локальное время через x секунд с эпохи unix в tz-наивной метке времени. Добиться этого немного странно, потому что:
Так что я ожидал бы, например, от. pd.to_datetime(1644516000, unit = "s")
будет одним из:
Timestamp('2022-02-10 18:00:00+0000', tz='UTC')
Timestamp('2022-02-10 10:00:00-0800', tz='US/Pacific')
Timestamp('2022-02-10 10:00:00')
(это то, что вы ищете)Но вместо этого pd.to_datetime дает вам местное время UTC с эпохи UTC, но в виде временной метки, не связанной с tz:
>>> pd.to_datetime(1644516000, unit = "s")
Timestamp('2022-02-10 18:00:00')
Одним из решений было бы вручную выполнить три шага, описанных выше, то есть сначала указать, что полученные метки времени являются UTC, затем преобразовать их в ваше местное время, а затем удалить tz-info:
df['time'] = pd.to_datetime(
df['time'],
unit='s',
utc=True
).dt.tz_convert("US/Pacific").dt.tz_localize(None)
но мне кажется, что мне не хватает чего-то более легкого здесь...
Один из способов - проанализировать как UTC, затем преобразовать в локальный, а затем локализовать в None:
pd.to_datetime(df['time'], unit='s', utc=True).dt.tz_convert("US/Pacific").dt.tz_localize(None)
, но мне любопытно узнать, есть ли лучший способ