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’ หมายถึงคอลัมน์ |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
ใน Excel เวลาอยากเปลี่ยนชื่อหัวคอลัมน์ เราก็แค่คลิกแล้วพิมพ์ทับ ใน pandas ผมใช้ .rename() แทนครับ — ส่ง dict เข้าไปบอกว่าคอลัมน์ไหนควรเปลี่ยนเป็นอะไร ที่เหลือที่ไม่ได้ระบุก็ยังคงชื่อเดิมทุกอย่าง ไม่ต้องไปแตะครับ
ผมชอบวิธีนี้มากกว่าการเขียน df.columns = […] ตรงๆ เพราะถ้ามี 20 คอลัมน์แต่อยากเปลี่ยนแค่ 2 อัน ไม่ต้องพิมพ์ชื่อทุกตัวให้เมื่อยมือครับ แค่ส่ง dict 2 คู่พอ
ที่เจ๋งคือ rename รับได้ทั้ง dict (ระบุเป็นคู่ old→new) และ function (เช่น str.lower หรือ lambda) ทำให้ผมเปลี่ยนชื่อคอลัมน์ทุกตัวพร้อมกันได้โดยไม่ต้องพิมพ์ชื่อทีละคอลัมน์เลย ✨
ส่วนตัวผมใช้บ่อยสุดตอนรับข้อมูลจาก API หรือ database ที่ชื่อคอลัมน์เป็น snake_case หรือตัวพิมพ์ใหญ่-เล็กปนกัน แล้วอยากทำให้เป็นมาตรฐานก่อนวิเคราะห์ต่อครับ 😎
ผมส่ง dict เข้า columns= โดยบอกว่า 'name' ให้เปลี่ยนเป็น 'ชื่อพนักงาน' และ 'sal' ให้เป็น 'เงินเดือน' ส่วนคอลัมน์ 'dept' ที่ไม่ได้ระบุก็ยังคงชื่อเดิมครับ ไม่ต้องแตะ
แทนที่จะส่ง dict ผมส่ง str.lower เป็น function เข้าไปเลย pandas จะเรียก str.lower กับชื่อคอลัมน์ทุกตัว ได้ 'name', 'salary', 'department' — ทำทีเดียวจบครับ ไม่ต้องพิมพ์ชื่อทุกตัว
คราวนี้ผมใช้ index= แทน columns= เพื่อเปลี่ยนป้ายแถว (row labels) ซึ่งส่วนใหญ่คนมองข้ามกันครับ ใช้ dict เหมือนกันเลย แค่สลับ argument
ผมใช้ lambda แทน str.lower เมื่ออยากทำหลายอย่างพร้อมกัน — ตัวนี้แปลงชื่อคอลัมน์ให้เป็นตัวพิมพ์เล็กทั้งหมดและแทนที่ช่องว่างด้วย underscore ได้ 'total_sales_2024' และ 'net_profit_2024' ครับ เหมาะสำหรับเตรียมข้อมูลก่อนเซฟลง database
ค่า 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() เพราะเขียนน้อยกว่าและโอกาสผิดพลาดน้อยกว่ามากครับ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ pandas rename จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
astype ใน pandas ผมใช้สำหรับแปลงประเภทข้อมูล (dtype) ของคอลัมน์หรือ DataFrame เช่น จาก object เป็น int หรือ float เป็น str ทำให้คำนวณได้ถูกต้องและประหยัด memory มากขึ้นครับ
drop ใน pandas ผมใช้สำหรับตัดคอลัมน์หรือแถวที่ไม่ต้องการออกจาก DataFrame โดยระบุชื่อเองโดยตรง เหมือนการ "ลบคอลัมน์" ใน Excel แบบเลือกได้เป๊ะๆ ว่าจะเอาคอลัมน์ไหนออกครับ
reset_index ผมใช้สำหรับเปลี่ยน index ของ DataFrame กลับมาเป็นคอลัมน์ธรรมดา แล้วเซ็ต index ใหม่เป็น 0, 1, 2, … ตามลำดับ — ส่วนใหญ่จะโผล่หลัง groupby ทุกครั้งที่อยากนำผลลัพธ์ไปใช้งานต่อครับ
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่