Python: NaN-i tuvastamine ja töötlemine ujukomaarvudes

1. Kuidas Pythonis NaN-i tuvastada

Mis on NaN?

NaN (Not a Number) on eriline ujukomaarv, mis tähistab, et arvutus on kehtetu või määramatu. Tavaliselt tekib see jagamisel nulliga või kehtetu arvutustulemuse korral, mistõttu on andmeanalüüsi ja arvutusprotsesside käigus eriti oluline olla ettevaatlik. Kui NaN-i õigesti ei käsitleta, võivad arvutustulemused olla ebatäpsed või programm ei pruugi ootuspäraselt toimida.

NaN-i tuvastamise tähtsus

Kui NaN on andmekogumis, võib see mõjutada andmete usaldusväärsust ja arvutustulemusi. Seetõttu on oluline esmalt NaN-i tuvastada ja seejärel teha sobivad toimingud (kustutamine, asendamine jms).

2. NaN’i loomise meetod

Pythonis saab NaN-i genereerida float('nan') abil. Seda kasutatakse numbriliste arvutuste puhul kehtetu tulemuse selges märkimisel.
num = float('nan')
print(num)  # Tulemus: nan

None’iga erinevus

NaN on numbriliselt kehtetu, samas kui None näitab “mitte midagi” olekut. None on == abil võrdluseks võimalik, kuid NaN ei ole iseendaga võrreldes võrdne, seega == kasutamine võrdlemiseks on sobimatu.
num = float('nan')
print(num == num)  # Tulemus: False

none_value = None
print(none_value == None)  # Tulemus: True
年収訴求

3. NaN tuvastamise meetod

3.1. Tuvastamine standardraamatukoguga(math.isnan()

Pythoni standardraamatukogus NaN-i tuvastamiseks kasutatakse math.isnan(). See funktsioon tagastab True, kui antud väärtus on NaN.
import math

num = float('nan')
print(math.isnan(num))  # Tulemus: True

3.2. NumPy abil tuvastamine(numpy.isnan()

NumPy on massiivide ja maatriksite arvutamisele keskendunud teek, mis pakub numpy.isnan() funktsiooni NaN-i tõhusaks tuvastamiseks massiivides. seda kasutatakse sageli numbrilises analüüsis ja teadusandmete töötlemisel.
import numpy as np

num_list = [1, 2, np.nan, 4]
print(np.isnan(num_list))  # Tulemus: [False False  True False]

3.3. pandasiga tuvastamine(pandas.isna()

Andmete raamistikuga töötamisel kasutatakse pandas’i isna() või isnull() funktsioone NaN-i tuvastamiseks. Need funktsioonid on kasulikud andmete puhastamisel ja puuduvate väärtuste töötlemisel.
import pandas as pd
import numpy as np

data = pd.Series([1, 2, np.nan, 4])
print(pd.isna(data))  # Tulemus: 0    False
                      #      1    False
                      #      2     True
                      #      3    False

4. NaN’i eemaldamise ja asendamise meetodid

4.1. NaN’i eemaldamine loendist

Loendis olevate NaN-de eemaldamiseks saab kombineerida math.isnan() ja loendi mõistete kasutamist.
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)  # Tulemuseks: [1, 2, 4]

4.2. NaN’i eemaldamine pandasiga (dropna())

Andmeraamist NaN-de eemaldamiseks kasutatakse dropna()-meetodit. Sellega saab eemaldada NaN-e sisaldavad read või veerud.
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’i asendamine pandasiga (fillna())

Kui NaN-e ei soovita eemaldada, vaid asendada kindla väärtusega, kasutatakse fillna()-meetodit.
import pandas as pd
import numpy as np

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

5. NaN-ga sisaldavad arvutused

NaN-ga sisaldavad arvutused annavad tulemuseks ka NaN, seega täpse tulemuse saamiseks tuleb NaN eelnevalt eemaldada või asendada.
import numpy as np

result = 10 + np.nan
print(result)  # Tulem: nan

NaN-ga sisaldavate statistiliste arvuste näide

Kui teete statistilisi arvutusi NaN-i sisaldaval andmekogul ja soovite NaN-i ignoreerida, kasutage NumPy funktsiooni nanmean(). See arvutab keskmise, jättes NaN-i välja.
import numpy as np

data = [1, 2, np.nan, 4]
mean = np.nanmean(data)  # Ignorides NaN-i, arvutab keskmise
print(mean)  # Tulem: 2.3333...

6. NaN-i tuvastamise kohta tähelepanekud

6.1. Võrdlusoperaatori käitumine

NaN-l on eriline omadus, et võrdlusoperaatoritega ei ole see teiste arvudega ega iseendaga võrdselt võrreldav. Seetõttu ei saa seda == või != abil tuvastada ning tuleb kasutada spetsiaalseid funktsioone (isnan() või isna()).
num = float('nan')
print(num == num)  # tulemus: False

6.2. Andmete puhastamise punktid

Andmeanalüüsis ei saa täpseid arvutusi teha, kui NaN-id jäävad alles. Kuna need võivad tulemusi moonutada, on vajalik eelnev korralik puhastamine. NaN-ide asjakohane eemaldamine või asendamine suurendab andmete usaldusväärsust.

7. Kokkuvõte

Pythonis saab math, numpy ja pandas kasutamisega tõhusalt NaN-i tuvastada ja töödelda. NaN-i käsitlemise õige mõistmine ning andmeanalüüsi ja arvutuslike arvutuste usaldusväärsuse tagamiseks vajalike põhiteadmiste omandamine on oskus, mis on kasulik kõigis programmeerimisvaldkondades.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール