Bạn có thể sử dụng chức năng tz_localize
để nhận biết múi giờ Timestamp hoặc DateTimeIndex, nhưng làm cách nào để làm ngược lại: làm cách nào bạn có thể chuyển đổi Dấu thời gian nhận biết múi giờ thành dấu thời gian đơn giản mà vẫn giữ nguyên múi giờ của nó?
Một ví dụ:
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
Tôi có thể xóa múi giờ bằng cách đặt nó thành Không, nhưng sau đó kết quả được chuyển đổi thành UTC (12 giờ trở thành 10 giờ):
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
Có cách nào khác để tôi có thể chuyển đổi DateTimeIndex sang múi giờ đơn thuần, nhưng vẫn giữ nguyên múi giờ mà nó đã được đặt không?
Một số bối cảnh về lý do tôi hỏi điều này: Tôi muốn làm việc với múi giờ ngây thơ về múi giờ (để tránh thêm rắc rối với múi giờ và tôi không cần chúng cho trường hợp tôi đang làm việc).
Nhưng vì lý do nào đó, tôi phải xử lý các múi giờ nhận biết múi giờ trong múi giờ địa phương của mình (Châu Âu / Brussels). Vì tất cả các dữ liệu khác của tôi đều không có múi giờ (nhưng được thể hiện ở múi giờ địa phương của tôi), nên tôi muốn chuyển đổi khoảng thời gian này thành ngây thơ để tiếp tục làm việc với nó, nhưng nó cũng phải được thể hiện theo múi giờ địa phương của tôi (vì vậy chỉ cần xóa thông tin múi giờ, mà không cần chuyển đổi thời gian hiển thị của người dùng thành UTC).
Tôi biết thời gian thực sự được lưu trữ nội bộ dưới dạng UTC và chỉ được chuyển đổi sang múi giờ khác khi bạn đại diện cho nó, vì vậy phải có một số loại chuyển đổi khi tôi muốn "phân định vị trí" nó. Ví dụ: với mô-đun ngày giờ trong python, bạn có thể "xóa" múi giờ như sau:
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>
Vì vậy, dựa trên điều này, tôi có thể làm như sau, nhưng tôi cho rằng điều này sẽ không hiệu quả lắm khi làm việc với thời gian lớn hơn:
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