Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Pandas - แปลง DateTimeIndex เป็น Series โดยไม่รวม Timezone

หากต้องการแปลง DateTimeIndex เป็น Series โดย ไม่รวม Timezone สามารถใช้ datetimeindex.tz_convert(None).to_series() เมธอด tz_convert(None) ใช้สำหรับลบ timezone ออก

ขั้นตอนการทำงาน

1. นำเข้าไลบรารีที่จำเป็น

import pandas as pd

2. สร้าง DatetimeIndex พร้อม Timezone

datetimeindex = pd.date_range(
    '2021-10-18 07:20:32.261811624', 
    periods=5, 
    tz='Australia/Adelaide', 
    freq='40S'
)

3. แสดง DateTimeIndex

print("DateTimeIndex...\n", datetimeindex)

4. แปลงเป็น Series โดยไม่รวม Timezone

print("\nDateTimeIndex to Series โดยไม่รวม Timezone...\n", 
      datetimeindex.tz_convert(None).to_series())

ตัวอย่างโค้ดสมบูรณ์

import pandas as pd

# DatetimeIndex with period 5 and frequency as S i.e. seconds
# timezone is Australia/Adelaide
datetimeindex = pd.date_range(
    '2021-10-18 07:20:32.261811624', 
    periods=5, 
    tz='Australia/Adelaide', 
    freq='40S'
)

# แสดง DateTimeIndex
print("DateTimeIndex...\n", datetimeindex)

# แสดง DateTimeIndex frequency
print("DateTimeIndex frequency...\n", datetimeindex.freq)

# แปลง DateTimeIndex เป็น Series
# ใช้ tz_convert(None) เพื่อลบ Timezone ออก
print("\nDateTimeIndex to Series โดยไม่รวม Timezone...\n", 
      datetimeindex.tz_convert(None).to_series())

ผลลัพธ์ที่คาดหวัง

DateTimeIndex... DatetimeIndex(['2021-10-18 07:20:32.261811624+10:30', '2021-10-18 07:21:12.261811624+10:30', '2021-10-18 07:21:52.261811624+10:30', '2021-10-18 07:22:32.261811624+10:30', '2021-10-18 07:23:12.261811624+10:30'], dtype='datetime64[ns, Australia/Adelaide]', freq='40S')
DateTimeIndex frequency... <40 * Seconds>
DateTimeIndex to Series โดยไม่รวม Timezone...
2021-10-17 20:50:32.261811624
2021-10-17 20:51:12.261811624
2021-10-17 20:51:52.261811624
2021-10-17 20:52:32.261811624
2021-10-17 20:53:12.261811624
Freq: 40S, dtype: datetime64[ns]

คำอธิบายสำคัญ:

  • tz_convert(None): แปลง timezone เป็น UTC แล้วลบ timezone info ออก (กลายเป็น timezone-naive)
  • เวลาจะเปลี่ยนจาก +10:30 (Adelaide) เป็น UTC: 07:20 - 10:30 = 20:50 (วันก่อนหน้า)
  • ผลลัพธ์เป็น datetime64[ns] ไม่มี timezone
  • ต่างจาก tz_localize(None) ที่แค่ลบ timezone info โดยไม่แปลงเวลา

เปรียบเทียบ tz_convert vs tz_localize

# tz_convert(None): แปลงเป็น UTC แล้วลบ tz (เวลาจะเปลี่ยน)
dt.tz_convert(None)

# tz_localize(None): ลบ tz โดยไม่แปลงเวลา (เวลาเดิมคงอยู่)
dt.tz_localize(None)