คู่มือครบ: ตรวจและจัดการ NaN ใน Python (เลขลอยตัว)

1. วิธีตรวจสอบ NaN ใน Python

NaN คืออะไร?

NaN(Not a Number)คือค่าทศนิยมลอยตัวพิเศษที่ใช้แสดงว่าการคำนวณเชิงตัวเลขไม่ถูกต้องหรือไม่ได้กำหนด โดยทั่วไปมักปรากฏจากการหารด้วยศูนย์หรือผลการคำนวณที่ไม่ถูกต้อง ดังนั้นจึงต้องระมัดระวังเป็นพิเศษในการวิเคราะห์ข้อมูลและการประมวลผลเชิงตัวเลข หากจัดการ NaN ไม่ถูกต้อง อาจทำให้ผลการคำนวณคลาดเคลื่อน หรือโปรแกรมทำงานไม่เป็นไปตามที่คาดหวัง。

ความสำคัญของการตรวจสอบ NaN

หากมี NaN อยู่ในชุดข้อมูล ความน่าเชื่อถือของข้อมูลและผลการคำนวณอาจได้รับผลกระทบ ดังนั้น การตรวจสอบ NaN ก่อน และดำเนินการภายหลัง(เช่น ลบหรือแทนที่)อย่างเหมาะสม จึงเป็นสิ่งสำคัญ

2. วิธีสร้าง NaN

ใน Python คุณสามารถสร้าง NaN ได้ด้วย float('nan') ใช้เพื่อแสดงอย่างชัดเจนถึงผลลัพธ์ที่ไม่ถูกต้องในการคำนวณตัวเลข。
num = float('nan')
print(num)  # ผลลัพธ์: nan

ความแตกต่างระหว่าง None

NaN ไม่ถูกต้องในเชิงตัวเลข ในขณะที่ None แสดงถึงสถานะ “ไม่มีอะไร” None สามารถเปรียบเทียบด้วย == ได้ แต่ NaN ไม่เท่ากับตัวมันเอง ดังนั้นการใช้ == เพื่อตรวจสอบจึงไม่เหมาะสม。
num = float('nan')
print(num == num)  # ผลลัพธ์: False

none_value = None
print(none_value == None)  # ผลลัพธ์: True
侍エンジニア塾

3. วิธีตรวจสอบค่า NaN

3.1. การตรวจสอบด้วยไลบรารีมาตรฐาน(math.isnan()

ในการตรวจสอบค่า NaN ด้วยไลบรารีมาตรฐานของ Python ให้ใช้ math.isnan() ฟังก์ชันนี้จะคืนค่า True หากค่าที่ส่งเข้าไปเป็น NaN
import math

num = float('nan')
print(math.isnan(num))  # ผลลัพธ์: True

3.2. การตรวจสอบด้วย NumPy(numpy.isnan()

NumPy เป็นไลบรารีที่เน้นการคำนวณอาเรย์และเมทริกซ์ โดยมีฟังก์ชัน numpy.isnan() สำหรับตรวจสอบค่า NaN ภายในอาเรย์ได้อย่างมีประสิทธิภาพ นิยมใช้ในการวิเคราะห์เชิงตัวเลขและการประมวลผลข้อมูลทางวิทยาศาสตร์
import numpy as np

num_list = [1, 2, np.nan, 4]
print(np.isnan(num_list))  # ผลลัพธ์: [False False  True False]

3.3. การตรวจสอบด้วย pandas(pandas.isna()

เมื่อทำงานกับ DataFrame ให้ใช้ isna() หรือ isnull() ของ pandas เพื่อตรวจสอบค่า NaN ฟังก์ชันเหล่านี้มีประโยชน์สำหรับการทำความสะอาดข้อมูลและการจัดการค่าที่หายไป
import pandas as pd
import numpy as np

data = pd.Series([1, 2, np.nan, 4])
print(pd.isna(data))  # ผลลัพธ์: 0    False
                      #      1    False
                      #      2     True
                      #      3    False

4. วิธีลบหรือแทนที่ NaN

4.1. ลบ NaN ออกจากลิสต์

ในการลบ NaN ที่อยู่ในลิสต์ คุณสามารถทำได้โดยใช้ math.isnan() ร่วมกับ list comprehension
import math

num_list = [1, 2, float('nan'), 4]
clean_list = [num for num in num_list if not math.isnan(num)]
print(clean_list)  # ผลลัพธ์: [1, 2, 4]

4.2. ลบ NaN ใน pandas(dropna()

หากต้องการลบ NaN ออกจาก DataFrame ให้ใช้เมธอด dropna() ซึ่งจะลบแถวหรือคอลัมน์ที่มี NaN ได้
import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, 6]})
clean_df = df.dropna()
print(clean_df)

4.3. แทนค่า NaN ใน pandas(fillna()

หากไม่ต้องการลบ NaN แต่ต้องการแทนด้วยค่าที่กำหนด ให้ใช้เมธอด fillna()
import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, 6]})
df.fillna(0, inplace=True)
print(df)
侍エンジニア塾

5. การคำนวณที่มี NaN ปะปน

การคำนวณที่มี NaN รวมอยู่จะให้ผลลัพธ์เป็น NaN เช่นกัน ดังนั้นเพื่อให้ได้ผลลัพธ์ที่แม่นยำ จำเป็นต้องลบ NaN ออกล่วงหน้าหรือแทนค่า
import numpy as np

result = 10 + np.nan
print(result)  # ผลลัพธ์: nan

ตัวอย่างการคำนวณสถิติที่มี NaN

เมื่อทำการคำนวณทางสถิติกับชุดข้อมูลที่มี NaN และต้องการคำนวณโดยไม่สนใจ NaN ให้ใช้ฟังก์ชันของ NumPy อย่าง nanmean() ซึ่งจะคำนวณค่าเฉลี่ยโดยตัดค่า NaN ออก
import numpy as np

data = [1, 2, np.nan, 4]
mean = np.nanmean(data)  # คำนวณค่าเฉลี่ยโดยไม่สนใจ NaN
print(mean)  # ผลลัพธ์: 2.3333...

6. ข้อควรระวังเกี่ยวกับการตรวจสอบ NaN

6.1. พฤติกรรมของตัวดำเนินการเปรียบเทียบ

NaN มีคุณสมบัติพิเศษคือ เมื่อใช้ตัวดำเนินการเปรียบเทียบกับตัวเลขอื่นหรือแม้กับตัวมันเอง ก็จะไม่ถือว่าเท่ากัน ดังนั้นจึงไม่สามารถตรวจสอบด้วย == หรือ != ได้ จำเป็นต้องใช้ฟังก์ชันเฉพาะ (เช่น isnan() หรือ isna())。
num = float('nan')
print(num == num)  # ผลลัพธ์: False

6.2. จุดสำคัญในการทำความสะอาดข้อมูล

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

7. สรุป

ใน Python การใช้ math, numpy, และ pandas จะช่วยให้สามารถตรวจสอบและจัดการ NaN ได้อย่างมีประสิทธิภาพ การทำความเข้าใจวิธีจัดการ NaN อย่างถูกต้อง และมีพื้นฐานความรู้เพื่อคงความน่าเชื่อถือของการวิเคราะห์ข้อมูลและการคำนวณเชิงตัวเลข เป็นทักษะที่มีประโยชน์ในทุกสาขาของการเขียนโปรแกรม.