Thep Excel

pandas .dt — ดึงปี/เดือน/วันออกจากคอลัมน์วันที่

pandas .dt accessor ผมใช้สำหรับดึงส่วนต่างๆ ของวันที่ออกจาก datetime Series เช่น ปี เดือน วัน ชื่อวัน หรือไตรมาส เหมือนกับที่ Excel มีฟังก์ชัน YEAR() MONTH() DAY() WEEKDAY() แต่ทำได้กับทั้งคอลัมน์พร้อมกันในคำสั่งเดียวเลยครับ

Series.dt.year

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

Series.dt.year

คืนค่า (Returns)
Series

คืนเป็น Series ของค่าที่ดึงออกมาครับ เช่น .dt.year คืน Series ของตัวเลขปี, .dt.day_name() คืน Series ของ string ชื่อวัน — เอาไป assign เป็นคอลัมน์ใหม่ หรือต่อด้วย groupby ได้เลย

Argument Type Required Default Description
year property Optional ดึงปี (integer) ออกจาก datetime Series — เทียบเท่า YEAR() ใน Excel
month property Optional ดึงเดือน 1-12 ออกจาก datetime Series — เทียบเท่า MONTH() ใน Excel
day property Optional ดึงวันที่ในเดือน 1-31 ออกจาก datetime Series — เทียบเท่า DAY() ใน Excel
dayofweek property Optional ดึงวันในสัปดาห์ 0=Monday ถึง 6=Sunday — เทียบเท่า WEEKDAY() ใน Excel (แต่ index ต่างกัน)
day_name() method Optional คืนชื่อวันเป็น string เช่น ‘Monday’, ‘Tuesday’ — ไม่มีใน Excel ตรงๆ ต้องใช้ TEXT(A1,”dddd”)
quarter property Optional ดึงไตรมาส 1-4 ออกจาก datetime Series — ไม่มีใน Excel โดยตรง ต้องคำนวณเอง

Examples

ตัวอย่างที่ 1: ดึงปีออกจากคอลัมน์วันที่ (เหมือน YEAR() ใน Excel)
df['date'].dt.year
ผมแปลง string เป็น datetime ก่อนด้วย pd.to_datetime() แล้วต่อด้วย .dt.year เพื่อดึงปีออกมาครับ ได้ผลเป็น Series ของตัวเลขปี เหมือนกับการใส่สูตร =YEAR(A1) แล้วลากลงทั้งคอลัมน์ใน Excel เลย
Python Code:

df['date'].dt.year

Result:

0 2024
1 2024
2 2025
Name: date, dtype: int32

ตัวอย่างที่ 2: ดึงเดือนและสร้างคอลัมน์ใหม่ (เหมือน MONTH() ใน Excel)
df['month']
ผมดึงเดือนออกมาเก็บเป็นคอลัมน์ใหม่ชื่อ month ครับ ค่าที่ได้คือ 1-12 เหมือน MONTH() ใน Excel เลย จากนั้นเอาคอลัมน์ month ไปทำ groupby ต่อได้เลย เช่น df.groupby('month')['sales'].sum() เพื่อหายอดขายรวมแต่ละเดือน
Python Code:

df['month']

Result:

0 1
1 7
2 3
Name: month, dtype: int32

ตัวอย่างที่ 3: ดูชื่อวันในสัปดาห์ด้วย day_name()
df['date'].dt.day_name()
อันนี้ผมชอบมากครับ .dt.day_name() คืนชื่อวันเป็น string เช่น 'Monday', 'Tuesday' ซึ่ง Excel ทำแบบนี้ต้องใช้ TEXT(A1,"dddd") แต่ใน pandas เรียกได้เลยง่ายมาก ดีตอนอยากกรองเฉพาะวันทำงาน หรือดูว่าวันไหนยอดขายดีที่สุด
Python Code:

df['date'].dt.day_name()

Result:

0 Monday
1 Tuesday
2 Wednesday
3 Saturday
Name: date, dtype: str

ตัวอย่างที่ 4: ดึงไตรมาสเพื่อวิเคราะห์ตาม Quarter
df.groupby('quarter')['revenue'].sum()
อันนี้คือ workflow จริงที่ผมใช้ประจำเลยครับ ดึง .dt.quarter เก็บเป็นคอลัมน์ก่อน แล้วต่อด้วย groupby เพื่อหารายได้รวมแต่ละไตรมาส ใน Excel ถ้าอยากทำแบบนี้ต้องเขียนสูตร =INT((MONTH(A1)-1)/3)+1 ยาวกว่าเยอะเลยครับ
Python Code:

df.groupby('quarter')['revenue'].sum()

Result:

quarter
1 50000
2 75000
3 60000
4 90000
Name: revenue, dtype: int64

FAQs

ต้องแปลงเป็น datetime ก่อนไหม ถ้าคอลัมน์เก็บเป็น string อยู่?

ต้องเสมอเลยครับ ถ้าคอลัมน์ยังเป็น string แล้วลอง .dt.year จะได้ error ว่า ‘Can only use .dt accessor with datetimelike values’ ผมเจอบ่อยมากตอนเริ่มใช้ pandas ใหม่ๆ วิธีแก้คือใส่ pd.to_datetime() ก่อนเสมอ เช่น df[‘date’] = pd.to_datetime(df[‘date’]) แล้วค่อยใช้ .dt ได้เลย

dayofweek ต่างจาก WEEKDAY() ใน Excel ยังไง?

ต่างกันที่จุดเริ่มต้นครับ pandas .dt.dayofweek นับ 0=Monday, 1=Tuesday, …, 6=Sunday แต่ Excel WEEKDAY() โดยค่า default นับ 1=Sunday, 2=Monday, …, 7=Saturday ผมเลยต้องระวังตอนเปรียบเทียบผลกับ Excel ถ้าอยากให้ตรงกัน ให้บวก 1 แล้วปรับ offset เองครับ หรือใช้ .dt.day_name() แทน แล้วกรองตามชื่อวันไปเลยชัวร์กว่า

ใช้ .dt ตอนคำนวณระยะห่างระหว่างวันได้ไหม?

ได้ครับ แต่ .dt ใช้สำหรับดึงส่วนประกอบของวันที่ออกมา ส่วนการคำนวณระยะห่างระหว่างวันผมทำด้วยการลบ datetime columns ตรงๆ เช่น df[‘end’] – df[‘start’] ได้ Timedelta Series ออกมา แล้วค่อยใช้ .dt.days เพื่อแปลงเป็นจำนวนวันต่อได้ครับ

Resources & Related

Additional Notes

ถ้าใน Excel เราใช้ YEAR(A1) เพื่อดึงปีออกจากวันที่ ใน pandas ผมใช้ .dt.year ทำแบบเดียวกันครับ แต่ดีกว่าตรงที่มันทำงานกับทั้งคอลัมน์พร้อมกันเลย ไม่ต้องลากสูตรลงทีละแถว

.dt คือ “accessor” ที่เปิดให้ Series เข้าถึง datetime properties ต่างๆ — เงื่อนไขเดียวคือ Series นั้นต้องเป็น datetime type ก่อนครับ ถ้าคอลัมน์เก็บเป็น string ต้องแปลงด้วย pd.to_datetime() ก่อนเสมอ

ที่เจ๋งคือ .dt มี property ให้เลือกเยอะมาก ครอบคลุมทุกอย่างที่ Excel ทำได้และมากกว่านั้น: .dt.year (YEAR), .dt.month (MONTH), .dt.day (DAY), .dt.day_name() (ชื่อวัน เช่น Monday), .dt.dayofweek (WEEKDAY เริ่มจาก 0=Monday), .dt.quarter (ไตรมาส), .dt.week (สัปดาห์ที่) และอีกหลายสิบตัว

ส่วนตัวผมใช้บ่อยที่สุดตอนต้องจัดกลุ่มยอดขายตามเดือนหรือไตรมาส ก็แค่ดึง .dt.month หรือ .dt.quarter ออกมาเป็นคอลัมน์ใหม่ แล้วต่อด้วย groupby ได้เลยครับ 😎

Leave a Reply

Your email address will not be published. Required fields are marked *