ndarray
คืนเป็น NumPy array ใหม่ทันทีครับ ใช้งานต่อได้เลย ไม่ต้อง chain อะไรเพิ่ม
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| condition | array_like | เงื่อนไขที่ให้ผลเป็น True หรือ False เช่น arr > 0 หรือ (arr > 0) & (arr < 10) |
| [x]ไม่บังคับ | array_like | ค่าที่จะคืนเมื่อเงื่อนไขเป็น True ถ้าไม่ใส่ x และ y ฟังก์ชันจะคืน index แทน |
| [y]ไม่บังคับ | array_like | ค่าที่จะคืนเมื่อเงื่อนไขเป็น False |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
numpy.where เป็นฟังก์ชันที่ผมหยิบมาใช้บ่อยมากเวลาทำงานสาย data science 😎
มันใช้ได้สองแบบครับ:
1. แบบใส่สามอาร์กิวเมนต์: np.where(condition, x, y) ถ้าเงื่อนไขจริงคืนค่า x ถ้าเท็จคืนค่า y ไล่เช็คทีละ element ทั้ง array พูดง่ายๆ คือ “จริงเอาอันนี้ เท็จเอาอันนั้น”
2. แบบใส่อาร์กิวเมนต์เดียว: np.where(condition) จะคืน index ของ element ที่เงื่อนไขเป็นจริงมาให้
ที่เจ๋งคือมันทำงานแบบ vectorized ซึ่งเร็วกว่าการเขียน for loop วนทีละตัวมากครับ แล้วถ้าเงื่อนไขมีหลายชั้น ก็ซ้อน np.where เข้าไปข้างในได้ คล้ายๆ nested IF ใน Excel เลย ✨
ผมให้มันไล่เช็คทุก element ครับ ถ้าตัวไหนมากกว่า 0 ก็เก็บค่าเดิมไว้ ถ้าน้อยกว่าหรือเท่ากับ 0 ให้ใส่ 0 แทน ผลที่ได้คือ array ใหม่ [1, 0, 3, 0, 5] ที่ค่าลบทุกตัวถูกเปลี่ยนเป็น 0 หมดเลย
พอใส่อาร์กิวเมนต์เดียว np.where จะเปลี่ยนโหมดมาคืน index ตำแหน่งที่เงื่อนไขเป็นจริงให้แทนครับ ในที่นี้ค่าที่มากกว่า 7 คือ 10 (อยู่ index 0), 8 (index 2) และ 12 (index 4) ก็เลยได้ผลเป็น [0, 2, 4]
อันนี้คือลูกเล่นที่ผมชอบครับ ซ้อน np.where สองชั้นเพื่อให้เกรด ชั้นนอกเช็คว่าคะแนน >= 80 ไหม ถ้าใช่ได้ A เลย ถ้าไม่ใช่ก็ส่งต่อให้ชั้นในเช็คอีกทีว่า >= 70 ไหม ใช่ได้ B ไม่ใช่ได้ C ผลออกมาคือ [C, B, C, A, C] ตรงตามคะแนนทุกตัว
ต่างกันที่ขนาดผลลัพธ์ครับ boolean indexing อย่าง arr[arr > 0] จะกรองเอาเฉพาะค่าที่ตรงเงื่อนไขออกมา ขนาด array เลยเปลี่ยน (สั้นลง) แต่ np.where(cond, x, y) คืน array ขนาดเท่าเดิมเสมอ แค่แทนค่าแต่ละตัวด้วย x หรือ y ตามเงื่อนไข ผมเลยเลือก np.where เวลาอยากรักษาตำแหน่งข้อมูลให้เท่าเดิมครับ
ได้ครับ จริงๆ pandas มีเมธอด .where() และ .mask() ในตัวที่ทำงานคล้ายกันอยู่แล้ว แต่ถ้าอยากใช้ np.where กับ Series ก็จัดได้เลย ผลที่ได้จะเป็น ndarray ซึ่งเอามาแปลงกลับเป็น Series ต่อได้ไม่มีปัญหา
ฟังก์ชันที่ผู้เขียนโยงไว้กับ numpy where จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
np.max ใน NumPy ผมใช้หาค่ามากที่สุดใน array หรือตามแต่ละแถว/คอลัมน์ใน matrix ได้ในคำสั่งเดียว เหมือนกับฟังก์ชัน MAX ใน Excel เลยครับ แต่รองรับข้อมูลหลายมิติได้ด้วยครับ
np.mean ใน NumPy ผมใช้สำหรับคำนวณค่าเฉลี่ยเลขคณิตของ array หรือของแต่ละแถว/คอลัมน์ใน matrix ได้ในคำสั่งเดียว เร็วกว่าเขียน sum/len เองหลายเท่า และยังรองรับข้อมูลหลายมิติได้ด้วยครับ
groupby ใน pandas ผมใช้สำหรับจัดกลุ่มข้อมูลใน DataFrame แล้วคำนวณค่าสรุปในแต่ละกลุ่ม เช่น หาผลรวม ค่าเฉลี่ย หรือค่าสถิติต่างๆ ตามหมวดหมู่ที่กำหนด ถ้าใครเคยใช้ PivotTable ใน Excel มาก่อน บอกเลยว่าตัวนี้คือเครื่องมือสายเดียวกันเลยครับ
np.argmax ผมใช้หา index หรือตำแหน่งของค่าที่มากที่สุดใน array ครับ ย้ำว่ามันคืน "ตำแหน่ง" ไม่ใช่ "ตัวค่า" ถ้าใครเคยใช้ Excel มาก่อน ตัวนี้คือ MATCH(MAX(range), range, 0) นั่นเองครับ
between ใน pandas ผมใช้เช็คว่าค่าในคอลัมน์อยู่ในช่วง [left, right] หรือเปล่า คืนออกมาเป็น Series ของ True/False (เรียกว่า boolean mask) เอาไปกรองแถวต่อได้เลย ถ้าใครเคยเขียนเงื่อนไขใน Excel แบบ ยอด >= 100 AND <= 500 ตัวนี้คือคำสั่งสั้นๆ ที่ทำแบบนั้นให้ในบรรทัดเดียวครับ
arr.reshape ใน NumPy ผมใช้สำหรับเปลี่ยนรูปร่าง (shape) ของ array โดยจำนวนสมาชิกทั้งหมดยังคงเดิม เช่น แปลง 1D array 12 ตัวให้กลายเป็น matrix 3×4 ได้ทันที โดยไม่ต้องสร้างข้อมูลใหม่ครับ
np.unique ใช้หาค่าที่ไม่ซ้ำกันใน array แล้วเรียงจากน้อยไปมากให้อัตโนมัติ คล้ายกับฟังก์ชัน UNIQUE ใน Excel 365 มากครับ ยังนับความถี่แต่ละค่าได้ด้วยถ้าใส่ return_counts=True
isin ใน pandas ผมใช้เช็คว่าแต่ละค่าในคอลัมน์ตรงกับค่าใน list ที่กำหนดไหม คืนมาเป็น True/False ทีละแถว ถ้าใครเคย filter หลายค่าพร้อมกันใน Excel หรือเขียน OR หลายเงื่อนไขซ้อนๆ กัน ตัวนี้คือทางลัดที่สะอาดกว่ามากครับ
query ใน pandas ผมใช้กรองแถวใน DataFrame ด้วยข้อความเงื่อนไขที่อ่านง่ายเหมือนพูดภาษาคน แทนที่จะเขียน boolean mask ยาวๆ ให้ตาลาย เหมาะมากกับเงื่อนไขซับซ้อนหลายข้อที่อยากให้โค้ดสั้นและอ่านรู้เรื่องครับ
np.arange ใน NumPy ผมใช้สำหรับสร้าง array ของเลขที่เรียงกันตามช่วงที่กำหนด คล้ายกับ range() ใน Python แต่ได้ผลออกมาเป็น ndarray ที่เอาไปคำนวณทางคณิตศาสตร์ต่อได้ทันที ใช้บ่อยมากตอนสร้างแกน x สำหรับกราฟหรือสร้างชุดตัวเลขทดสอบครับ
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่