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

Python Pandas – แปลง String ให้เป็น Datetime Type ด้วย to_datetime()

ภาพรวม

แปลงคอลัมน์ที่เก็บวันที่เป็น string ให้เป็น datetime64[ns] dtype เพื่อใช้งานฟังก์ชันวันที่ได้เต็มที่

ตัวอย่างโค้ด


import pandas as pd

dataFrame = pd.DataFrame({
    'Product Category': ['Computer', 'Mobile Phone', 'Electronics', 'Stationery'],
    'Product Name': ['Keyboard', 'Charger', 'SmartTV', 'Chairs'],
    'Date_of_Purchase': ['10/07/2021', '20/04/2021', '25/06/2021', '15/02/2021']
})

print("DataFrame...\n", dataFrame)

# แปลง string -> datetime
dataFrame['Date_of_Purchase'] = pd.to_datetime(dataFrame['Date_of_Purchase'])

print("\nUpdated DataFrame (string dates converted to dates)...\n", dataFrame)
print("\nDtype:", dataFrame['Date_of_Purchase'].dtype)

ผลลัพธ์

DataFrame...
  Date_of_Purchase Product Category Product Name
0       10/07/2021       Computer    Keyboard
1       20/04/2021   Mobile Phone     Charger
2       25/06/2021    Electronics     SmartTV
3       15/02/2021     Stationery      Chairs

Updated DataFrame...
  Date_of_Purchase Product Category Product Name
0       2021-10-07       Computer    Keyboard
1       2021-04-20   Mobile Phone     Charger
2       2021-06-25    Electronics     SmartTV
3       2021-02-15     Stationery      Chairs

Dtype: datetime64[ns]

หมายเหตุสำคัญ: Day/Month Ambiguity

'10/07/2021' ถูก parse เป็น 2021-10-07 (MM/DD/YYYY - US format) ไม่ใช่ 10 กรกฎาคม
ใช้ dayfirst=True สำหรับ DD/MM/YYYY format:


pd.to_datetime(dataFrame['Date_of_Purchase'], dayfirst=True)
# 0   2021-07-10
# 1   2021-04-20
# 2   2021-06-25
# 3   2021-02-15

พารามิเตอร์ที่น่าสนใจ

  • format – ระบุ format ให้ชัดเจน (เร็วกว่า inference) เช่น '%d/%m/%Y'
  • errors – 'raise' (default), 'coerce' (invalid -> NaT), 'ignore'
  • utc – แปลงเป็น UTC timezone
  • infer_datetime_format – พยายามเดา format (deprecated ใน version ใหม่)

หลังแปลงแล้ว ทำได้อะไร

  • df['Date_of_Purchase'].dt.year / .month / .day / .weekday
  • df.resample('M', on='Date_of_Purchase').sum()
  • df['Date_of_Purchase'] + pd.Timedelta(days=30)
  • (df['Date_of_Purchase'] - df['Date_of_Purchase'].min()).dt.days