Thep Excel

pandas rename — เปลี่ยนชื่อคอลัมน์และ index ใน DataFrame

rename ใน pandas ผมใช้สำหรับเปลี่ยนชื่อคอลัมน์หรือ index ใน DataFrame โดยส่ง dict บอกว่า ‘ชื่อเดิม’ ควรกลายเป็น ‘ชื่อใหม่’ อะไร เหมือนการ Rename column header ใน Excel แต่ทำแบบโปรแกรมได้ครับ

df.rename(mapper, columns, index, axis)

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

df.rename(mapper, columns, index, axis)

คืนค่า (Returns)
DataFrame

คืน DataFrame ใหม่ที่มีชื่อคอลัมน์หรือ index ตามที่ระบุครับ ต้องรับค่าไว้เสมอ เช่น df = df.rename(…) เพราะ default ไม่ได้แก้ไข DataFrame เดิม จากนั้นนำไปใช้งานต่อได้เลย

Argument Type Required Default Description
columns dict | function Optional เปลี่ยนชื่อคอลัมน์ ส่งเป็น dict {‘ชื่อเดิม’: ‘ชื่อใหม่’} หรือ function เช่น str.lower เพื่อแปลงทุกชื่อพร้อมกัน
index dict | function Optional เปลี่ยนชื่อ index (แถว) วิธีใช้เหมือน columns เลยครับ ส่ง dict หรือ function ได้เช่นกัน
mapper dict | function Optional ใช้คู่กับ axis เพื่อระบุว่าจะเปลี่ยนคอลัมน์ (axis=1) หรือ index (axis=0) ผมไม่ค่อยใช้วิธีนี้ ชอบ columns= ตรงๆ มากกว่าครับ
axis int | str Optional ใช้คู่กับ mapper — 0 หรือ ‘index’ หมายถึงแถว, 1 หรือ ‘columns’ หมายถึงคอลัมน์

Examples

ตัวอย่างที่ 1: เปลี่ยนชื่อคอลัมน์ด้วย dict
df.rename(columns={'name': 'ชื่อพนักงาน', 'sal': 'เงินเดือน'})
ผมส่ง dict เข้า columns= โดยบอกว่า 'name' ให้เปลี่ยนเป็น 'ชื่อพนักงาน' และ 'sal' ให้เป็น 'เงินเดือน' ส่วนคอลัมน์ 'dept' ที่ไม่ได้ระบุก็ยังคงชื่อเดิมครับ ไม่ต้องแตะ
Python Code:

df.rename(columns={'name': 'ชื่อพนักงาน', 'sal': 'เงินเดือน'})

Result:

ชื่อพนักงาน เงินเดือน dept
0 สมชาย 50000 IT
1 สมหญิง 60000 HR

ตัวอย่างที่ 2: เปลี่ยนชื่อคอลัมน์ทุกตัวเป็นตัวพิมพ์เล็กด้วย function
df.rename(columns=str.lower)
แทนที่จะส่ง dict ผมส่ง str.lower เป็น function เข้าไปเลย pandas จะเรียก str.lower กับชื่อคอลัมน์ทุกตัว ได้ 'name', 'salary', 'department' — ทำทีเดียวจบครับ ไม่ต้องพิมพ์ชื่อทุกตัว
Python Code:

df.rename(columns=str.lower)

Result:

name salary department
0 สมชาย 50000 IT
1 สมหญิง 60000 HR

ตัวอย่างที่ 3: เปลี่ยนชื่อ index (ป้ายแถว)
df.rename(index={'q1': 'ไตรมาส 1', 'q2': 'ไตรมาส 2', 'q3': 'ไตรมาส 3'})
คราวนี้ผมใช้ index= แทน columns= เพื่อเปลี่ยนป้ายแถว (row labels) ซึ่งส่วนใหญ่คนมองข้ามกันครับ ใช้ dict เหมือนกันเลย แค่สลับ argument
Python Code:

df.rename(index={'q1': 'ไตรมาส 1', 'q2': 'ไตรมาส 2', 'q3': 'ไตรมาส 3'})

Result:

score
ไตรมาส 1 85
ไตรมาส 2 92
ไตรมาส 3 78

ตัวอย่างที่ 4: เปลี่ยนชื่อคอลัมน์ด้วย lambda เพื่อจัดการชื่อซับซ้อน
df.rename(columns=lambda x: x.replace(' ', '_').lower())
ผมใช้ lambda แทน str.lower เมื่ออยากทำหลายอย่างพร้อมกัน — ตัวนี้แปลงชื่อคอลัมน์ให้เป็นตัวพิมพ์เล็กทั้งหมดและแทนที่ช่องว่างด้วย underscore ได้ 'total_sales_2024' และ 'net_profit_2024' ครับ เหมาะสำหรับเตรียมข้อมูลก่อนเซฟลง database
Python Code:

df.rename(columns=lambda x: x.replace(' ', '_').lower())

Result:

total_sales_2024 net_profit_2024
0 1000 300
1 2000 500

FAQs

rename() เปลี่ยน DataFrame เดิมเลยไหม หรือต้องรับค่าใหม่?

ค่า default ของ rename() คือคืน DataFrame ใหม่โดยไม่แตะตัวเดิมครับ ถ้าอยากบันทึกผลต้องรับค่าไว้เสมอ เช่น df = df.rename(columns={‘old’: ‘new’}) หรือถ้าอยากเปลี่ยน df เดิมเลยใส่ inplace=True เพิ่มเข้าไปได้ แต่ผมไม่แนะนำ inplace= เพราะมันทำให้ debug ยากขึ้นครับ ใช้การ assign กลับดีกว่า

ถ้าระบุชื่อคอลัมน์เดิมผิดใน dict จะเกิดอะไรขึ้น?

ไม่เกิด error ครับ — pandas จะเงียบๆ และข้ามคู่นั้นไปเลย DataFrame จะไม่มีการเปลี่ยนแปลงอะไรสำหรับชื่อที่ไม่พบ ข้อดีคือ code ไม่พัง แต่ข้อเสียคืออาจไม่รู้ว่าสะกดผิด ผมเลยมักเช็ค df.columns ก่อน rename เสมอครับ

ต่างกับ df.columns = […] ยังไง?

ต่างกันตรงที่ .rename() ให้ระบุแค่คอลัมน์ที่อยากเปลี่ยน ส่วน df.columns = […] ต้องระบุครบทุกคอลัมน์ตามลำดับครับ ถ้ามี 30 คอลัมน์แต่เปลี่ยนแค่ 2 อัน ผมเลือก .rename() เพราะเขียนน้อยกว่าและโอกาสผิดพลาดน้อยกว่ามากครับ

Resources & Related

Additional Notes

ใน Excel เวลาอยากเปลี่ยนชื่อหัวคอลัมน์ เราก็แค่คลิกแล้วพิมพ์ทับ ใน pandas ผมใช้ .rename() แทนครับ — ส่ง dict เข้าไปบอกว่าคอลัมน์ไหนควรเปลี่ยนเป็นอะไร ที่เหลือที่ไม่ได้ระบุก็ยังคงชื่อเดิมทุกอย่าง ไม่ต้องไปแตะครับ

ผมชอบวิธีนี้มากกว่าการเขียน df.columns = […] ตรงๆ เพราะถ้ามี 20 คอลัมน์แต่อยากเปลี่ยนแค่ 2 อัน ไม่ต้องพิมพ์ชื่อทุกตัวให้เมื่อยมือครับ แค่ส่ง dict 2 คู่พอ

ที่เจ๋งคือ rename รับได้ทั้ง dict (ระบุเป็นคู่ old→new) และ function (เช่น str.lower หรือ lambda) ทำให้ผมเปลี่ยนชื่อคอลัมน์ทุกตัวพร้อมกันได้โดยไม่ต้องพิมพ์ชื่อทีละคอลัมน์เลย ✨

ส่วนตัวผมใช้บ่อยสุดตอนรับข้อมูลจาก API หรือ database ที่ชื่อคอลัมน์เป็น snake_case หรือตัวพิมพ์ใหญ่-เล็กปนกัน แล้วอยากทำให้เป็นมาตรฐานก่อนวิเคราะห์ต่อครับ 😎

Leave a Reply

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