rename ใน pandas ผมใช้สำหรับเปลี่ยนชื่อคอลัมน์หรือ index ใน DataFrame โดยส่ง dict บอกว่า ‘ชื่อเดิม’ ควรกลายเป็น ‘ชื่อใหม่’ อะไร เหมือนการ Rename column header ใน Excel แต่ทำแบบโปรแกรมได้ครับ
df.rename(mapper, columns, index, axis)
df.rename(mapper, columns, index, axis)
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’ หมายถึงคอลัมน์ |
df.rename(columns={'name': 'ชื่อพนักงาน', 'sal': 'เงินเดือน'})df.rename(columns={'name': 'ชื่อพนักงาน', 'sal': 'เงินเดือน'})
ชื่อพนักงาน เงินเดือน dept
0 สมชาย 50000 IT
1 สมหญิง 60000 HR
df.rename(columns=str.lower)df.rename(columns=str.lower)
name salary department
0 สมชาย 50000 IT
1 สมหญิง 60000 HR
df.rename(index={'q1': 'ไตรมาส 1', 'q2': 'ไตรมาส 2', 'q3': 'ไตรมาส 3'})df.rename(index={'q1': 'ไตรมาส 1', 'q2': 'ไตรมาส 2', 'q3': 'ไตรมาส 3'})
score
ไตรมาส 1 85
ไตรมาส 2 92
ไตรมาส 3 78
df.rename(columns=lambda x: x.replace(' ', '_').lower())df.rename(columns=lambda x: x.replace(' ', '_').lower())
total_sales_2024 net_profit_2024
0 1000 300
1 2000 500
ค่า default ของ rename() คือคืน DataFrame ใหม่โดยไม่แตะตัวเดิมครับ ถ้าอยากบันทึกผลต้องรับค่าไว้เสมอ เช่น df = df.rename(columns={‘old’: ‘new’}) หรือถ้าอยากเปลี่ยน df เดิมเลยใส่ inplace=True เพิ่มเข้าไปได้ แต่ผมไม่แนะนำ inplace= เพราะมันทำให้ debug ยากขึ้นครับ ใช้การ assign กลับดีกว่า
ไม่เกิด error ครับ — pandas จะเงียบๆ และข้ามคู่นั้นไปเลย DataFrame จะไม่มีการเปลี่ยนแปลงอะไรสำหรับชื่อที่ไม่พบ ข้อดีคือ code ไม่พัง แต่ข้อเสียคืออาจไม่รู้ว่าสะกดผิด ผมเลยมักเช็ค df.columns ก่อน rename เสมอครับ
ต่างกันตรงที่ .rename() ให้ระบุแค่คอลัมน์ที่อยากเปลี่ยน ส่วน df.columns = […] ต้องระบุครบทุกคอลัมน์ตามลำดับครับ ถ้ามี 30 คอลัมน์แต่เปลี่ยนแค่ 2 อัน ผมเลือก .rename() เพราะเขียนน้อยกว่าและโอกาสผิดพลาดน้อยกว่ามากครับ
ใน Excel เวลาอยากเปลี่ยนชื่อหัวคอลัมน์ เราก็แค่คลิกแล้วพิมพ์ทับ ใน pandas ผมใช้ .rename() แทนครับ — ส่ง dict เข้าไปบอกว่าคอลัมน์ไหนควรเปลี่ยนเป็นอะไร ที่เหลือที่ไม่ได้ระบุก็ยังคงชื่อเดิมทุกอย่าง ไม่ต้องไปแตะครับ
ผมชอบวิธีนี้มากกว่าการเขียน df.columns = […] ตรงๆ เพราะถ้ามี 20 คอลัมน์แต่อยากเปลี่ยนแค่ 2 อัน ไม่ต้องพิมพ์ชื่อทุกตัวให้เมื่อยมือครับ แค่ส่ง dict 2 คู่พอ
ที่เจ๋งคือ rename รับได้ทั้ง dict (ระบุเป็นคู่ old→new) และ function (เช่น str.lower หรือ lambda) ทำให้ผมเปลี่ยนชื่อคอลัมน์ทุกตัวพร้อมกันได้โดยไม่ต้องพิมพ์ชื่อทีละคอลัมน์เลย ✨
ส่วนตัวผมใช้บ่อยสุดตอนรับข้อมูลจาก API หรือ database ที่ชื่อคอลัมน์เป็น snake_case หรือตัวพิมพ์ใหญ่-เล็กปนกัน แล้วอยากทำให้เป็นมาตรฐานก่อนวิเคราะห์ต่อครับ 😎