Ви можете використовувати функцію, tz_localize
щоб зробити часовий пояс або часовий пояс DateTimeIndex відомим, але як ви можете зробити навпаки: як ви можете перетворити часовий пояс, відомий часовому поясу, у наївний, зберігаючи свій часовий пояс?
Приклад:
In [82]: t = pd.date_range(start="2013-05-18 12:00:00", periods=10, freq='s', tz="Europe/Brussels")
In [83]: t
Out[83]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 12:00:00, ..., 2013-05-18 12:00:09]
Length: 10, Freq: S, Timezone: Europe/Brussels
Я міг видалити часовий пояс, встановивши для нього значення None, але тоді результат перетворюється на UTC (12 годин став 10):
In [86]: t.tz = None
In [87]: t
Out[87]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 10:00:00, ..., 2013-05-18 10:00:09]
Length: 10, Freq: S, Timezone: None
Чи є інший спосіб перетворити DateTimeIndex на наївний часовий пояс, але при збереженні часового поясу, в якому він був встановлений?
Деякий контекст причини, з якої я запитую це: я хочу працювати з наївними часовими поясами часових поясів (щоб уникнути зайвих клопотів з часовими поясами, і вони мені не потрібні для випадку, над яким я працюю).
Але з якихось причин мені доводиться мати справу з часовими поясами, що відповідають часовому поясу, у моєму місцевому часовому поясі (Європа / Брюссель). Оскільки всі мої інші дані є часовими поясами (але представлені в моєму місцевому часовому поясі), я хочу перетворити цей часовий ряд на наївний для подальшої роботи з ним, але він також повинен бути представлений у моєму місцевому часовому поясі (тому просто видаліть інформацію про часовий пояс, без перетворення видимого для користувача часу на UTC).
Я знаю, що час насправді внутрішньо зберігається як UTC і перетворюється в інший часовий пояс лише тоді, коли ви його представляєте, тому має бути якесь перетворення, коли я хочу його "ділокалізувати". Наприклад, за допомогою модуля python datetime ви можете "видалити" часовий пояс так:
In [119]: d = pd.Timestamp("2013-05-18 12:00:00", tz="Europe/Brussels")
In [120]: d
Out[120]: <Timestamp: 2013-05-18 12:00:00+0200 CEST, tz=Europe/Brussels>
In [121]: d.replace(tzinfo=None)
Out[121]: <Timestamp: 2013-05-18 12:00:00>
Отже, виходячи з цього, я міг би зробити наступне, але, гадаю, це буде не надто ефективно при роботі з більшими часовими рядами:
In [124]: t
Out[124]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 12:00:00, ..., 2013-05-18 12:00:09]
Length: 10, Freq: S, Timezone: Europe/Brussels
In [125]: pd.DatetimeIndex([i.replace(tzinfo=None) for i in t])
Out[125]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 12:00:00, ..., 2013-05-18 12:00:09]
Length: 10, Freq: None, Timezone: None