Thep Excel

pandas isnaเช็คว่าช่องไหนเป็นค่าว่าง (NaN)

isna ใน pandas ผมใช้สำหรับเช็คว่าแต่ละช่องใน DataFrame มีค่าว่าง (NaN) อยู่หรือเปล่า คืนผลเป็น True/False ทุกช่อง เหมือน ISBLANK ใน Excel เลยครับ แต่ทำได้กับทั้งตารางพร้อมกันในคำสั่งเดียว

>_
df.isna()

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

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าDataFrameต้อง chain ต่อ

คืน DataFrame ขนาดเท่าเดิมทุกช่องครับ แต่ค่าในแต่ละช่องจะเป็น True (ว่าง) หรือ False (มีค่า) — ถ้าเรียกบน Series คอลัมน์เดียวจะได้ Series ของ bool กลับมาแทน

Additional Notes

ก่อนที่จะวิเคราะห์ข้อมูลจริงจัง สิ่งแรกที่ผมทำเสมอคือดูว่ามีช่องไหนข้อมูลหายไปบ้างครับ และ isna คือเครื่องมือที่ผมเปิดใช้เป็นอันดับแรกเลย

หลักการทำงานของมันง่ายมาก: isna วิ่งผ่านทุกช่องใน DataFrame แล้วถามว่า “ช่องนี้ว่างไหม?” ถ้าว่าง (NaN หรือ None) ได้ True ถ้ามีค่าได้ False — คืนออกมาเป็น DataFrame ขนาดเท่าเดิมทุกช่องเลยครับ Pattern ที่ผมใช้บ่อยที่สุดคือ df.isna().sum() ซึ่งจะนับจำนวนช่องว่างในแต่ละคอลัมน์ให้ครบในทีเดียว

ที่เจ๋งคือ isna ใช้ได้ทั้งระดับ DataFrame ทั้งหมด (df.isna()) และระดับคอลัมน์เดี่ยว (df[‘col’].isna()) ทำให้กรองเฉพาะแถวที่ข้อมูลครบหรือว่างได้ยืดหยุ่นมาก 🎯

ส่วนตัวผมถือว่า df.isna().sum() เป็น “ก้าวแรก” ของ EDA (Exploratory Data Analysis) ทุกครั้งเลยครับ รู้ว่าข้อมูลขาดตรงไหนก่อน แล้วค่อยตัดสินใจว่าจะ fillna เติม หรือ dropna ทิ้ง 😎

Examples

ตัวอย่างที่ 1: เช็คทั้ง DataFrame ว่าช่องไหนว่างบ้างdf.isna()

ผมสั่ง df.isna() เพื่อดูภาพรวมว่าทั้งตารางมีช่องว่างอยู่ที่ไหนบ้างครับ ได้ DataFrame ขนาดเท่าเดิมกลับมา ช่องไหนว่างจะเป็น True ช่องไหนมีข้อมูลจะเป็น False — เหมือนทำ ISBLANK ให้ทุกช่องพร้อมกันเลย

>_
df.isna()

ผลลัพธ์ name score
0 False False
1 False True
2 True False
ตัวอย่างที่ 2: นับจำนวนช่องว่างแต่ละคอลัมน์ด้วย .sum()df.isna().sum()

Pattern นี้คือที่ผมใช้บ่อยที่สุดเลยครับ — df.isna().sum() นับว่าแต่ละคอลัมน์มีค่าว่างกี่แถว ได้ออกมาเป็น Series สรุปให้เห็นภาพชัดเจนว่าคอลัมน์ไหนมีปัญหาข้อมูลหาย เหมือน COUNTBLANK ใน Excel แต่ทำทุกคอลัมน์พร้อมกันครับ

>_
df.isna().sum()

ผลลัพธ์name 1
age 2
score 1
dtype: int64
ตัวอย่างที่ 3: เช็คค่าว่างในคอลัมน์เดี่ยว แล้วกรองแถวที่ว่างdf[df['name'].isna()]

ผมใช้ df['name'].isna() เพื่อเช็คเฉพาะคอลัมน์ name ว่าแถวไหนว่างบ้าง แล้วเอาผลไปกรองเป็น boolean index เพื่อดูแถวที่มีชื่อหายไปครับ วิธีนี้ผมใช้ตอนต้องการ debug หรือ inspect แถวที่มีปัญหาโดยตรง

>_
df[df['name'].isna()]

ผลลัพธ์ name score
2 NaN 70.0
ตัวอย่างที่ 4: นับเปอร์เซ็นต์ค่าว่างแต่ละคอลัมน์df.isna().sum() / len(df) * 100

ผมต่อยอด pattern df.isna().sum() โดยหารด้วยจำนวนแถวทั้งหมดแล้วคูณ 100 ได้เปอร์เซ็นต์ข้อมูลหายในแต่ละคอลัมน์ครับ มีประโยชน์มากตอน QC ข้อมูล — ถ้าคอลัมน์ไหน missing เกิน 50% ผมมักตัดสินใจ drop คอลัมน์นั้นทิ้งเลย

>_
df.isna().sum() / len(df) * 100

ผลลัพธ์name 25.0
email 50.0
score 25.0
dtype: float64

FAQs

isna กับ notna ต่างกันยังไง?+

notna คือ ตรงข้ามของ isna เลยครับ ถ้า isna คืน True ตรงช่องว่าง notna ก็คืน False ตรงนั้น ผมใช้ notna ตอนอยากกรองเฉพาะแถวที่ข้อมูลครบ เช่น df[df['score'].notna()] จะได้แถวที่ score ไม่ว่างทุกแถวครับ สะดวกกว่าเขียน ~df['score'].isna() มาก

ใช้ isna เช็ค string ว่างเปล่า ('') ได้ไหม?+

ไม่ได้ครับ isna เช็คเฉพาะค่า NaN และ None เท่านั้น string เปล่า '' ถือว่ามีค่า (เป็น string ความยาว 0) isna จะคืน False ให้ ถ้าอยากเช็ค string เปล่าด้วยผมต้องเขียนเพิ่มเป็น (df['col'].isna()) | (df['col'] == '') ครับ

isna() หลังจาก groupby ใช้ได้ไหม?+

ใช้ได้ครับ แต่ผมมักใช้กับ DataFrame ธรรมดามากกว่า Pattern ที่เจอบ่อยคือเช็ค missing ก่อน groupby เพื่อให้รู้ว่าค่า NaN จะไปอยู่กลุ่มไหน (pandas จัดกลุ่ม NaN แยกต่างหากโดย default) ถ้าไม่อยากให้ NaN ติดมาด้วยต้อง dropna ก่อน groupby ครับ

Resources & Related

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

ฟังก์ชันนี้pandas isnaCleaning
Cleaning (2)
pandas dropna

dropna ใน pandas ผมใช้สำหรับกำจัดแถวหรือคอลัมน์ที่มีค่า NaN ออกจาก DataFrame ครับ เหมาะมากสำหรับขั้นตอนทำความสะอาดข้อมูลก่อนวิเคราะห์ เพราะค่า NaN แฝงอยู่ในข้อมูลจริงแทบทุกชุด

pandas fillna

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

Aggregation (1)
pandas count

df.count() ผมใช้นับจำนวนค่าที่ "มีข้อมูลจริง" ในแต่ละคอลัมน์ โดยข้ามช่องที่เป็นค่าว่าง (NaN/None) ไปให้อัตโนมัติ ถ้าใครคุ้นกับ COUNTA ใน Excel ที่นับเฉพาะช่องที่มีข้อมูล บอกเลยว่าตัวนี้คือพี่น้องกันเลยครับ

Selection (1)
pandas query

query ใน pandas ผมใช้กรองแถวใน DataFrame ด้วยข้อความเงื่อนไขที่อ่านง่ายเหมือนพูดภาษาคน แทนที่จะเขียน boolean mask ยาวๆ ให้ตาลาย เหมาะมากกับเงื่อนไขซับซ้อนหลายข้อที่อยากให้โค้ดสั้นและอ่านรู้เรื่องครับ

Comments

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