isna ใน pandas ผมใช้สำหรับเช็คว่าแต่ละช่องใน DataFrame มีค่าว่าง (NaN) อยู่หรือเปล่า คืนผลเป็น True/False ทุกช่อง เหมือน ISBLANK ใน Excel เลยครับ แต่ทำได้กับทั้งตารางพร้อมกันในคำสั่งเดียว
df.isna()
df.isna()
DataFrameคืน DataFrame ขนาดเท่าเดิมทุกช่องครับ แต่ค่าในแต่ละช่องจะเป็น True (ว่าง) หรือ False (มีค่า) — ถ้าเรียกบน Series คอลัมน์เดียวจะได้ Series ของ bool กลับมาแทน
df.isna()df.isna()
name score
0 False False
1 False True
2 True False
df.isna().sum()df.isna().sum()
name 1
age 2
score 1
dtype: int64
df[df['name'].isna()]df[df['name'].isna()]
name score
2 NaN 70.0
df.isna().sum() / len(df) * 100df.isna().sum() / len(df) * 100
name 25.0
email 50.0
score 25.0
dtype: float64
notna คือ ตรงข้ามของ isna เลยครับ ถ้า isna คืน True ตรงช่องว่าง notna ก็คืน False ตรงนั้น ผมใช้ notna ตอนอยากกรองเฉพาะแถวที่ข้อมูลครบ เช่น df[df[‘score’].notna()] จะได้แถวที่ score ไม่ว่างทุกแถวครับ สะดวกกว่าเขียน ~df[‘score’].isna() มาก
ไม่ได้ครับ isna เช็คเฉพาะค่า NaN และ None เท่านั้น string เปล่า ” ถือว่ามีค่า (เป็น string ความยาว 0) isna จะคืน False ให้ ถ้าอยากเช็ค string เปล่าด้วยผมต้องเขียนเพิ่มเป็น (df[‘col’].isna()) | (df[‘col’] == ”) ครับ
ใช้ได้ครับ แต่ผมมักใช้กับ DataFrame ธรรมดามากกว่า Pattern ที่เจอบ่อยคือเช็ค missing ก่อน groupby เพื่อให้รู้ว่าค่า NaN จะไปอยู่กลุ่มไหน (pandas จัดกลุ่ม NaN แยกต่างหากโดย default) ถ้าไม่อยากให้ NaN ติดมาด้วยต้อง dropna ก่อน groupby ครับ
ก่อนที่จะวิเคราะห์ข้อมูลจริงจัง สิ่งแรกที่ผมทำเสมอคือดูว่ามีช่องไหนข้อมูลหายไปบ้างครับ และ 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 ทิ้ง 😎