ภาพรวม
แปลงคอลัมน์ที่เก็บวันที่เป็น 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 timezoneinfer_datetime_format– พยายามเดา format (deprecated ใน version ใหม่)
หลังแปลงแล้ว ทำได้อะไร
df['Date_of_Purchase'].dt.year / .month / .day / .weekdaydf.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