Anda dapat menggunakan fungsi ini tz_localizeuntuk membuat Timestamp atau DateTimeIndex menjadi sadar, tetapi bagaimana Anda bisa melakukan yang sebaliknya: bagaimana Anda bisa mengubah Timestamp yang sadar zona waktu menjadi yang naif, sambil mempertahankan zona waktunya?
Sebuah contoh:
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
Saya dapat menghapus zona waktu dengan mengaturnya ke Tidak Ada, tetapi kemudian hasilnya diubah ke UTC (pukul 12 menjadi 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
Apakah ada cara lain untuk mengonversi DateTimeIndex menjadi zona waktu naif, tetapi sambil mempertahankan zona waktu yang telah ditetapkan?
Beberapa konteks tentang alasan saya menanyakan ini: Saya ingin bekerja dengan rangkaian waktu naif zona waktu (untuk menghindari kerumitan ekstra dengan zona waktu, dan saya tidak membutuhkannya untuk kasus yang sedang saya tangani).
Tetapi untuk beberapa alasan, saya harus berurusan dengan rangkaian waktu yang sadar zona waktu di zona waktu lokal saya (Eropa / Brussel). Karena semua data saya yang lain adalah zona waktu naif (tetapi terwakili dalam zona waktu lokal saya), saya ingin mengubah rangkaian waktu ini menjadi naif untuk digunakan lebih lanjut, tetapi juga harus diwakili dalam zona waktu lokal saya (jadi hapus saja info zona waktu tersebut, tanpa mengubah waktu yang terlihat pengguna ke UTC).
Saya tahu waktu sebenarnya disimpan secara internal sebagai UTC dan hanya dikonversi ke zona waktu lain jika Anda mewakilinya, jadi harus ada semacam konversi ketika saya ingin "mendelokalisasi" -nya. Misalnya, dengan modul datetime python Anda dapat "menghapus" zona waktu seperti ini:
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>
Jadi, berdasarkan ini, saya dapat melakukan hal berikut, tetapi saya rasa ini tidak akan terlalu efisien saat bekerja dengan rangkaian waktu yang lebih besar:
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