Kuidas täita Panda DataFrame PlatoBlockchain Data Intelligence'is NaN-e. Vertikaalne otsing. Ai.

Kuidas täita Panda DataFrame'is NaN-e

Puuduvad väärtused on tavalised ja ilmnevad kas inimliku vea, instrumendi vea, teise meeskonna töötlemise või muul viisil lihtsalt andmete puudumise tõttu teatud vaatluse jaoks.

Selles baidis vaatleme, kuidas täita NaN-e a DataFrame, kui otsustate NaN-e käsitleda nende täitmisega.

Alustuseks loome maketi DataFrame mõne juhusliku väärtusega välja langenud:

import numpy as np
array = np.random.randn(25, 3)
mask = np.random.choice([1, 0], array.shape, p=[.3, .7]).astype(bool)
array[mask] = np.nan

df = pd.DataFrame(array, columns=['Col1', 'Col2', 'Col3'])
        Col1      Col2      Col3 
0  -0.671603 -0.792415  0.783922
1   0.207720       NaN  0.996131
2  -0.892115 -1.282333       NaN
3  -0.315598 -2.371529 -1.959646
4        NaN       NaN -0.584636
5   0.314736 -0.692732 -0.303951
6   0.355121       NaN       NaN
7        NaN -1.900148  1.230828
8  -1.795468  0.490953       NaN
9  -0.678491 -0.087815       NaN
10  0.755714  0.550589 -0.702019
11  0.951908 -0.529933  0.344544
12       NaN  0.075340 -0.187669
13       NaN  0.314342 -0.936066
14       NaN  1.293355  0.098964

Joonistame näiteks kolmanda veeru:

plt.plot(df['Col3'])

Erinevate tehnikatega täidetuna saab selle NaN-ga täidetud graafiku asendada järgmisega:

Kuidas täita Panda DataFrame PlatoBlockchain Data Intelligence'is NaN-e. Vertikaalne otsing. Ai.

fillna() – keskmine, mediaan, režiim

Saate need väärtused täita uude veergu ja määrata selle veerule, mida soovite täita, või kohapeal, kasutades inplace argument. Siin eraldame kontrollimise hõlbustamiseks täidetud väärtused uude veergu:

mean = df['Col3'].fillna(df['Col3'].mean(), inplace=False)
median = df['Col3'].fillna(df['Col3'].median(), inplace=False)
mode = df['Col3'].fillna(df['Col3'].mode(), inplace=False)

Veeru mediaan, keskmine ja moodus on -0.187669, -0.110873 ja 0.000000 ja neid väärtusi kasutatakse vastavalt iga NaN jaoks. See on sisuliselt konstantsete väärtustega täitmine, kus sisestatav väärtus sõltub veeru kirjest.

Esiteks, mediaanväärtustega täitmine annab tulemuseks:

Kuidas täita Panda DataFrame PlatoBlockchain Data Intelligence'is NaN-e. Vertikaalne otsing. Ai.

Keskmiste väärtustega:

Kuidas täita Panda DataFrame PlatoBlockchain Data Intelligence'is NaN-e. Vertikaalne otsing. Ai.

Režiimi väärtustega:

Kuidas täita Panda DataFrame PlatoBlockchain Data Intelligence'is NaN-e. Vertikaalne otsing. Ai.

fillna() – püsiväärtus

Selle asemel võite täita ka konstantse väärtusega:

Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!

constant = df['Col3'].fillna(0, inplace=False

Selle tulemuseks on iga NaN asemel konstantne väärtus (0). 0 on lähedane meie mediaanile ja keskmisele ning võrdne režiimiga, nii et täidetud väärtused sarnanevad meie näidisandmestiku jaoks selle meetodiga:

0     0.783922
1     0.996131
2     0.000000
3    -1.959646
4    -0.584636
5    -0.303951
6     0.000000
7     1.230828
8     0.000000
9     0.000000
10   -0.702019
11    0.344544
12   -0.187669
13   -0.936066
14    0.098964

Kuidas täita Panda DataFrame PlatoBlockchain Data Intelligence'is NaN-e. Vertikaalne otsing. Ai.

fillna() – edasi- ja tagasitäitmine

Igal real – saate täita edasi või tagasi, võttes väärtuse kas enne või pärast olevast reast:

ffill = df['Col3'].fillna(method='ffill')
bfill = df['Col3'].fillna(method='bfill')

Edasitäitmisega, kuna meil puudub 2. reast, võetakse rea 1 väärtus teise täiteks. Väärtused levivad edasi:

0     0.783922
1     0.996131
2     0.996131
3    -1.959646
4    -0.584636
5    -0.303951
6    -0.303951
7     1.230828
8     1.230828
9     1.230828
10   -0.702019
11    0.344544
12   -0.187669
13   -0.936066
14    0.098964

Kuidas täita Panda DataFrame PlatoBlockchain Data Intelligence'is NaN-e. Vertikaalne otsing. Ai.

Tagurpidi täitmisega juhtub vastupidine. 2. rida täidetakse 3. rea väärtusega:

0     0.783922
1     0.996131
2    -1.959646
3    -1.959646
4    -0.584636
5    -0.303951
6     1.230828
7     1.230828
8    -0.702019
9    -0.702019
10   -0.702019
11    0.344544
12   -0.187669
13   -0.936066
14    0.098964

Kuidas täita Panda DataFrame PlatoBlockchain Data Intelligence'is NaN-e. Vertikaalne otsing. Ai.

Siiski, kui neid on rohkem kui üks NaN järjestuses – need ei tööta hästi ja võivad NaN-e veelgi allapoole kaskaadida, moonutades andmeid ja eemaldades tegelikult salvestatud väärtused.

interpoleerida ()

. interpolate() meetod delegeerib väärtuste interpoleerimise SciPy'le meetodite komplekt väärtuste interpoleerimiseks. See aktsepteerib mitmesuguseid argumente, sealhulgas nearest, zero, slinear, quadratic, cubic, spline, barycentric, polynomial, krogh, piecewise_polynomial, spline, pchip, akima, cubicsplineJne

Interpoleerimine on palju paindlikum ja "targem" kui lihtsalt väärtuste täitmine konstantide või poolmuutujatega, nagu näiteks eelmised meetodid.

Interpoleerimine suudab jada õigesti täita viisil, mida ükski teine ​​​​meetod ei suuda, näiteks:

s = pd.Series([0, 1, np.nan, np.nan, np.nan, 5])
s.fillna(s.mean()).values

s.fillna(method='ffill').values

s.interpolate().values

Vaikimisi interpolatsioon on lineaarne ja seda eeldades 1...5 tõenäoliselt a 1, 2, 3, 4, 5 järjestus pole kaugelt ammutatud (kuid pole garanteeritud). Nii pidev täitmine kui ka edasi- või tagasitäitmine ebaõnnestuvad siin haledalt. Üldiselt on interpoleerimine tavaliselt hea sõber, kui tegemist on NaN-ide täitmisega mürasignaalides või rikutud andmekogumites.

Interpolatsiooni tüüpidega katsetamine võib anda paremaid tulemusi.

Siin on kaks interpolatsioonimeetodit (splice ja polynomial nõuda order argument):

nearest = df['Col3'].interpolate(method='nearest')
polynomial = df['Col3'].interpolate(method='polynomial', order=3)

Nende tulemuseks on:

Kuidas täita Panda DataFrame PlatoBlockchain Data Intelligence'is NaN-e. Vertikaalne otsing. Ai.

Ja:

Kuidas täita Panda DataFrame PlatoBlockchain Data Intelligence'is NaN-e. Vertikaalne otsing. Ai.

Ajatempel:

Veel alates Stackabus