---
title: pandas rename — เปลี่ยนชื่อคอลัมน์และ index ใน DataFrame
url: https://www.thepexcel.com/functions/python/transform/pandas-rename/
type: function-explainer
program: Python
syntax: "df.rename(mapper, columns, index, axis)"
date: 2026-05-31
scores:
  popularity: 5
  difficulty: 3
  usefulness: 5
---

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

> rename ใน pandas ผมใช้สำหรับเปลี่ยนชื่อคอลัมน์หรือ index ใน DataFrame โดยส่ง dict บอกว่า 'ชื่อเดิม'

## คำอธิบาย

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

## Syntax

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

## Arguments

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

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: เปลี่ยนชื่อคอลัมน์ด้วย dict

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

**ผลลัพธ์:** `  ชื่อพนักงาน  เงินเดือน dept
0       สมชาย      50000   IT
1      สมหญิง      60000   HR`

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

### 2. ตัวอย่างที่ 2: เปลี่ยนชื่อคอลัมน์ทุกตัวเป็นตัวพิมพ์เล็กด้วย function

```excel
df.rename(columns=str.lower)
```

**ผลลัพธ์:** `     name  salary department
0   สมชาย   50000         IT
1  สมหญิง   60000         HR`

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

### 3. ตัวอย่างที่ 3: เปลี่ยนชื่อ index (ป้ายแถว)

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

**ผลลัพธ์:** `          score
ไตรมาส 1     85
ไตรมาส 2     92
ไตรมาส 3     78`

คราวนี้ผมใช้ index= แทน columns= เพื่อเปลี่ยนป้ายแถว (row labels) ซึ่งส่วนใหญ่คนมองข้ามกันครับ ใช้ dict เหมือนกันเลย แค่สลับ argument

### 4. ตัวอย่างที่ 4: เปลี่ยนชื่อคอลัมน์ด้วย lambda เพื่อจัดการชื่อซับซ้อน

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

**ผลลัพธ์:** `   total_sales_2024  net_profit_2024
0              1000              300
1              2000              500`

ผมใช้ lambda แทน str.lower เมื่ออยากทำหลายอย่างพร้อมกัน — ตัวนี้แปลงชื่อคอลัมน์ให้เป็นตัวพิมพ์เล็กทั้งหมดและแทนที่ช่องว่างด้วย underscore ได้ 'total_sales_2024' และ 'net_profit_2024' ครับ เหมาะสำหรับเตรียมข้อมูลก่อนเซฟลง database

## หมายเหตุเพิ่มเติม

- 💡 ผมมักเขียน df = df.rename(columns={...}) เสมอแทนการใช้ inplace=True เพราะถ้า rename ผิดยังมี df เดิมให้ย้อนกลับได้ครับ ไม่ต้องโหลดข้อมูลใหม่ทั้งหมด

- ถ้าชื่อคอลัมน์มีช่องว่างหรืออักขระพิเศษ ผมแนะนำใช้ .rename(columns=str.lower) หรือ lambda ทำความสะอาดทีเดียวก่อนวิเคราะห์ต่อครับ จะทำให้เรียกคอลัมน์ด้วย dot notation เช่น df.salary ได้แทน df['Salary'] ที่ต้องใส่วงเล็บ

## คำถามที่พบบ่อย

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

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

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

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

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

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

## แหล่งข้อมูลเพิ่มเติม

- [pandas DataFrame.rename (official docs)](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.rename.html) _(article)_

---

_Source: [https://www.thepexcel.com/functions/python/transform/pandas-rename/](https://www.thepexcel.com/functions/python/transform/pandas-rename/)_
