Thep Excel

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

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

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

ความนิยม5/10
ความยาก3/10
ประโยชน์5/10

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าDataFrame

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

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

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

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

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

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

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

Examples

ตัวอย่างที่ 1: เปลี่ยนชื่อคอลัมน์ด้วย dictdf.rename(columns={'name': 'ชื่อพนักงาน', 'sal': 'เงินเดือน'})

ผมส่ง dict เข้า columns= โดยบอกว่า 'name' ให้เปลี่ยนเป็น 'ชื่อพนักงาน' และ 'sal' ให้เป็น 'เงินเดือน' ส่วนคอลัมน์ 'dept' ที่ไม่ได้ระบุก็ยังคงชื่อเดิมครับ ไม่ต้องแตะ

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

ผลลัพธ์ ชื่อพนักงาน เงินเดือน dept
0 สมชาย 50000 IT
1 สมหญิง 60000 HR
ตัวอย่างที่ 2: เปลี่ยนชื่อคอลัมน์ทุกตัวเป็นตัวพิมพ์เล็กด้วย functiondf.rename(columns=str.lower)

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

>_
df.rename(columns=str.lower)

ผลลัพธ์ 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

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

ผลลัพธ์ 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

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

ผลลัพธ์ 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

ฟังก์ชันที่ผู้เขียนโยงไว้กับ pandas rename จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้pandas renameTransform
Transform (3)
pandas astype

astype ใน pandas ผมใช้สำหรับแปลงประเภทข้อมูล (dtype) ของคอลัมน์หรือ DataFrame เช่น จาก object เป็น int หรือ float เป็น str ทำให้คำนวณได้ถูกต้องและประหยัด memory มากขึ้นครับ

pandas drop

drop ใน pandas ผมใช้สำหรับตัดคอลัมน์หรือแถวที่ไม่ต้องการออกจาก DataFrame โดยระบุชื่อเองโดยตรง เหมือนการ "ลบคอลัมน์" ใน Excel แบบเลือกได้เป๊ะๆ ว่าจะเอาคอลัมน์ไหนออกครับ

pandas reset_index

reset_index ผมใช้สำหรับเปลี่ยน index ของ DataFrame กลับมาเป็นคอลัมน์ธรรมดา แล้วเซ็ต index ใหม่เป็น 0, 1, 2, … ตามลำดับ — ส่วนใหญ่จะโผล่หลัง groupby ทุกครั้งที่อยากนำผลลัพธ์ไปใช้งานต่อครับ

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่