replace ใน pandas ผมใช้สำหรับแทนที่ค่าหนึ่งด้วยอีกค่าหนึ่งทั้ง DataFrame หรือ Series เหมาะกับงาน cleaning ข้อมูล ใครเคยใช้ Find & Replace (Ctrl+H) ใน Excel มาก่อน บอกเลยว่าตัวนี้คือพี่น้องกันเลยครับ
df.replace(to_replace, value)
df.replace(to_replace, value)
DataFrame
คืนเป็น DataFrame ก้อนใหม่ที่แทนค่าเรียบร้อยแล้วครับ ตัวเดิมไม่ถูกแก้ ผมเลยต้องรับค่ากลับด้วย df = df.replace(…) ถึงจะเก็บผลไว้ใช้ต่อได้
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| to_replace | scalar | list | dict | Yes | ค่าที่ต้องการค้นหาเพื่อแทนที่ ใส่ได้ทั้งค่าเดียว เช่น 0, list ของหลายค่า เช่น [‘na’,’NA’] หรือ dict ที่จับคู่ค่าเก่า→ค่าใหม่ เช่น {‘M’:’ชาย’,’F’:’หญิง’} | |
| value | scalar | list | Optional | None | ค่าใหม่ที่จะนำไปแทน ถ้า to_replace เป็น dict อยู่แล้วไม่ต้องใส่ value เพราะระบุค่าใหม่ไว้ใน dict แล้ว |
df.replace(0, 50)df.replace(0, 50)
name score
0 Ann 80
1 Bob 50
2 Cat 95
df.replace({'M': 'ชาย', 'F': 'หญิง'})df.replace({'M': 'ชาย', 'F': 'หญิง'})
name gender
0 Ann หญิง
1 Bob ชาย
2 Cat หญิง
df.replace(['na', 'NA'], 'ไม่ระบุ')df.replace(['na', 'NA'], 'ไม่ระบุ')
name status
0 Ann ไม่ระบุ
1 Bob ไม่ระบุ
2 Cat active
ต่างกันตรงระดับที่ทำงานครับ df.replace() จับคู่ทั้งค่า (whole value) เช่น ช่องที่เป็น ‘NA’ ทั้งช่องถึงจะถูกแทน ส่วน str.replace() แทน substring ภายในข้อความ เช่น เปลี่ยน ‘กทม’ ที่ฝังอยู่ในคำว่า ‘กทม.มหานคร’ ได้ ส่วนตัวผมใช้ df.replace ตอนแทนทั้งค่า และใช้ str.replace ตอนอยากแก้แค่บางส่วนของข้อความครับ
ไม่ครับ โดย default replace จะคืน DataFrame ก้อนใหม่ออกมา ตัวเดิมไม่ถูกแตะ ผมเลยต้องรับค่ากลับด้วย df = df.replace(…) เสมอ ไม่งั้นผลจะหายไปเฉยๆ ส่วน argument inplace=True ที่เคยใช้แก้ในตัวเดิมนั้น pandas รุ่นใหม่เริ่มไม่แนะนำแล้ว ผมเลยรับค่ากลับเองดีกว่าครับ ปลอดภัยกว่าเยอะ
ตอนผมต้องล้างข้อมูลก่อนเอาไปวิเคราะห์ replace คือเครื่องมือที่หยิบมาใช้บ่อยมากครับ 😎
หน้าที่ของมันตรงไปตรงมาเลย: หาค่าที่เราระบุ แล้วแทนด้วยค่าใหม่ เหมือนกด Ctrl+H ใน Excel เป๊ะ ต่างกันแค่เราสั่งผ่านโค้ดเลยทำซ้ำกับไฟล์ใหม่ๆ ได้ทุกวันโดยไม่ต้องมานั่งคลิกเอง
ที่เจ๋งคือ replace ยืดหยุ่นมาก แทนได้ทั้งทีละค่า แทนหลายค่าพร้อมกันด้วย dict (เช่น {‘M’:’ชาย’,’F’:’หญิง’}) หรือแทน list ของค่าหลายๆ ตัวให้กลายเป็นค่าเดียว สั่งรวดเดียวจบ ไม่ต้องเขียนทีละบรรทัด ✨
ส่วนตัวผมใช้มันแก้พวกข้อมูลที่พิมพ์ไม่เหมือนกัน เช่น ‘N/A’, ‘na’, ‘NA’ ที่จริงหมายถึงค่าว่างเหมือนกันหมด ก็ replace ให้เป็นมาตรฐานเดียวก่อนวิเคราะห์ต่อครับ