Thep Excel

pandas replaceแทนค่าใน DataFrame/Series งานทำความสะอาดข้อมูล

replace ใน pandas ผมใช้สำหรับแทนที่ค่าหนึ่งด้วยอีกค่าหนึ่งทั้ง DataFrame หรือ Series เหมาะกับงาน cleaning ข้อมูล ใครเคยใช้ Find & Replace (Ctrl+H) ใน Excel มาก่อน บอกเลยว่าตัวนี้คือพี่น้องกันเลยครับ

>_
df.replace(to_replace, value)

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

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าDataFrame

คืนเป็น DataFrame ก้อนใหม่ที่แทนค่าเรียบร้อยแล้วครับ ตัวเดิมไม่ถูกแก้ ผมเลยต้องรับค่ากลับด้วย df = df.replace(…) ถึงจะเก็บผลไว้ใช้ต่อได้

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
to_replace scalar | list | dict ค่าที่ต้องการค้นหาเพื่อแทนที่ ใส่ได้ทั้งค่าเดียว เช่น 0, list ของหลายค่า เช่น [‘na’,’NA’] หรือ dict ที่จับคู่ค่าเก่า→ค่าใหม่ เช่น {‘M’:’ชาย’,’F’:’หญิง’}
[value]ไม่บังคับ scalar | list None ค่าใหม่ที่จะนำไปแทน ถ้า to_replace เป็น dict อยู่แล้วไม่ต้องใส่ value เพราะระบุค่าใหม่ไว้ใน dict แล้ว

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

Additional Notes

ตอนผมต้องล้างข้อมูลก่อนเอาไปวิเคราะห์ replace คือเครื่องมือที่หยิบมาใช้บ่อยมากครับ 😎

หน้าที่ของมันตรงไปตรงมาเลย: หาค่าที่เราระบุ แล้วแทนด้วยค่าใหม่ เหมือนกด Ctrl+H ใน Excel เป๊ะ ต่างกันแค่เราสั่งผ่านโค้ดเลยทำซ้ำกับไฟล์ใหม่ๆ ได้ทุกวันโดยไม่ต้องมานั่งคลิกเอง

ที่เจ๋งคือ replace ยืดหยุ่นมาก แทนได้ทั้งทีละค่า แทนหลายค่าพร้อมกันด้วย dict (เช่น {‘M’:’ชาย’,’F’:’หญิง’}) หรือแทน list ของค่าหลายๆ ตัวให้กลายเป็นค่าเดียว สั่งรวดเดียวจบ ไม่ต้องเขียนทีละบรรทัด ✨

ส่วนตัวผมใช้มันแก้พวกข้อมูลที่พิมพ์ไม่เหมือนกัน เช่น ‘N/A’, ‘na’, ‘NA’ ที่จริงหมายถึงค่าว่างเหมือนกันหมด ก็ replace ให้เป็นมาตรฐานเดียวก่อนวิเคราะห์ต่อครับ

Examples

ตัวอย่างที่ 1: แทนค่าเดียวด้วยค่าเดียว (เหมือน Ctrl+H)df.replace(0, 50)

ผมแทนเลข 0 ในตารางทั้งหมดให้กลายเป็น 50 ครับ เหมือนเปิด Find & Replace ใน Excel แล้วพิมพ์ค้นหา 0 แทนด้วย 50 แล้วกด Replace All เลย — replace จะไล่ดูทุกคอลัมน์ให้เอง

>_
df.replace(0, 50)

ผลลัพธ์ name score
0 Ann 80
1 Bob 50
2 Cat 95
ตัวอย่างที่ 2: แทนหลายค่าพร้อมกันด้วย dict mappingdf.replace({'M': 'ชาย', 'F': 'หญิง'})

คราวนี้ผมส่ง dict เข้าไป จับคู่ค่าเก่า→ค่าใหม่หลายตัวรวดเดียวครับ M กลายเป็น 'ชาย' และ F กลายเป็น 'หญิง' พร้อมกัน ไม่ต้องเรียก replace ซ้ำหลายรอบ แบบนี้ผมใช้บ่อยสุดเวลาแปลงรหัสย่อให้เป็นข้อความเต็ม

>_
df.replace({'M': 'ชาย', 'F': 'หญิง'})

ผลลัพธ์ name gender
0 Ann หญิง
1 Bob ชาย
2 Cat หญิง
ตัวอย่างที่ 3: แทน list ของหลายค่าให้เป็นค่าเดียวdf.replace(['na', 'NA'], 'ไม่ระบุ')

ปัญหาคลาสสิกของข้อมูลจริงครับ ค่าว่างถูกพิมพ์มาหลายแบบทั้ง 'na' และ 'NA' ผมเลยส่ง list ของค่าที่อยากเก็บกวาด แล้วแทนด้วยค่ามาตรฐานเดียวคือ 'ไม่ระบุ' ทำให้ข้อมูลสะอาดเป็นมาตรฐานก่อนเอาไปวิเคราะห์ต่อ

>_
df.replace(['na', 'NA'], 'ไม่ระบุ')

ผลลัพธ์ name status
0 Ann ไม่ระบุ
1 Bob ไม่ระบุ
2 Cat active

FAQs

replace ต่างจาก str.replace ยังไง?+

ต่างกันตรงระดับที่ทำงานครับ df.replace() จับคู่ทั้งค่า (whole value) เช่น ช่องที่เป็น 'NA' ทั้งช่องถึงจะถูกแทน ส่วน str.replace() แทน substring ภายในข้อความ เช่น เปลี่ยน 'กทม' ที่ฝังอยู่ในคำว่า 'กทม.มหานคร' ได้ ส่วนตัวผมใช้ df.replace ตอนแทนทั้งค่า และใช้ str.replace ตอนอยากแก้แค่บางส่วนของข้อความครับ

replace แก้ข้อมูลในตัวแปรเดิมเลยไหม?+

ไม่ครับ โดย default replace จะคืน DataFrame ก้อนใหม่ออกมา ตัวเดิมไม่ถูกแตะ ผมเลยต้องรับค่ากลับด้วย df = df.replace(…) เสมอ ไม่งั้นผลจะหายไปเฉยๆ ส่วน argument inplace=True ที่เคยใช้แก้ในตัวเดิมนั้น pandas รุ่นใหม่เริ่มไม่แนะนำแล้ว ผมเลยรับค่ากลับเองดีกว่าครับ ปลอดภัยกว่าเยอะ

Resources & Related

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

ฟังก์ชันนี้pandas replaceCleaning
Transform (2)
pandas astype

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

pandas .str

pandas .str accessor ทำให้ผมใช้ text functions อย่าง upper, replace, contains กับทุกแถวในคอลัมน์พร้อมกันบรรทัดเดียว เหมือนได้ UPPER/SUBSTITUTE/SEARCH ของ Excel แต่ไม่ต้องลากสูตรทีละเซลล์ครับ

Cleaning (1)
pandas fillna

df.fillna() ใน pandas ผมใช้สำหรับเติมค่า NaN ที่หายไปใน DataFrame ด้วยค่าที่กำหนด เช่น 0, ค่าเฉลี่ย หรือค่าจากแถวก่อนหน้า เป็นขั้นตอนสำคัญในการทำความสะอาดข้อมูลก่อนวิเคราะห์หรือส่งเข้า model ครับ

Comments

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