Cum să umpleți NaN într-un Pandas DataFrame PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Cum să completați NaN într-un cadru de date Pandas

Valorile lipsă sunt obișnuite și apar fie din cauza unei erori umane, a unei erori de instrument, a prelucrării de la o altă echipă, fie din cauza lipsei de date pentru o anumită observație.

În acest octet, vom arunca o privire la modul de completare a NaN-urilor într-un DataFrame, dacă alegeți să gestionați NaN-urile completându-le.

În primul rând, să creăm o simulare DataFrame cu unele valori aleatorii abandonate:

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

Să tragem, să zicem, a treia coloană:

plt.plot(df['Col3'])

Când este umplut cu diverse tehnici - acest grafic plin cu NaN poate fi înlocuit cu:

Cum să umpleți NaN într-un Pandas DataFrame PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

fillna() – Medie, Mediană, Mod

Puteți completa aceste valori într-o coloană nouă și o puteți aloca coloanei pe care doriți să o completați sau în loc folosind inplace argument. Aici, vom extrage valorile completate într-o nouă coloană pentru ușurința inspecției:

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)

Mediana, media și modul coloanei sunt -0.187669, -0.110873 și 0.000000 iar aceste valori vor fi utilizate pentru fiecare NaN respectiv. Aceasta se umple efectiv cu valori constante, unde valoarea introdusă depinde de întreaga coloană.

În primul rând, completarea cu valori medii are ca rezultat:

Cum să umpleți NaN într-un Pandas DataFrame PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Cu valori medii:

Cum să umpleți NaN într-un Pandas DataFrame PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Cu valori de mod:

Cum să umpleți NaN într-un Pandas DataFrame PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

fillna() – Valoare constantă

De asemenea, puteți completa cu o valoare constantă:

Consultați ghidul nostru practic și practic pentru a învăța Git, cu cele mai bune practici, standarde acceptate de industrie și fisa de cheat incluse. Opriți căutarea pe Google a comenzilor Git și de fapt învăţa aceasta!

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

Aceasta are ca rezultat plasarea unei valori constante (0) în locul fiecărui NaN. 0 este aproape de mediana și medie și egală cu modul, astfel încât valorile completate se vor asemăna îndeaproape cu această metodă pentru setul nostru de date simulat:

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

Cum să umpleți NaN într-un Pandas DataFrame PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

fillna() – Umplere înainte și înapoi

Pe fiecare rând – puteți face o umplere înainte sau înapoi, luând valoarea fie din rândul de dinainte, fie de după:

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

Cu umplerea înainte, deoarece lipsește din rândul 2 – valoarea de la rândul 1 este luată pentru a umple al doilea. Valorile se propagă înainte:

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

Cum să umpleți NaN într-un Pandas DataFrame PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Cu umplerea înapoi, se întâmplă invers. Rândul 2 este completat cu valoarea din rândul 3:

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

Cum să umpleți NaN într-un Pandas DataFrame PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Totuși, dacă există mai mult de unul NaN într-o secvență – acestea nu se vor descurca bine și pot arunca NaN-urile în cascadă mai jos, deformând datele și eliminând valorile înregistrate efectiv.

interpola()

interpolate() metoda deleagă interpolarea valorilor către SciPy suită de metode de interpolare a valorilor. Acceptă o mare varietate de argumente, inclusiv, nearest, zero, slinear, quadratic, cubic, spline, barycentric, polynomial, krogh, piecewise_polynomial, spline, pchip, akima, cubicspline, Etc

Interpolarea este mult mai flexibilă și „inteligentă” decât simpla completare a valorilor cu constante sau semivariabile, cum ar fi metodele anterioare.

Interpolarea poate umple corect o secvență într-un mod în care nicio altă metodă nu o poate umple, cum ar fi:

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

Interpolarea implicită este liniară și presupunând că 1...5 este probabil a 1, 2, 3, 4, 5 secvența nu este exagerată (dar nu este garantată). Atât umplerea constantă, cât și umplerea înainte sau înapoi eșuează lamentabil aici. În general, interpolarea va fi de obicei un bun prieten atunci când vine vorba de completarea NaN-urilor cu semnale zgomotoase sau seturi de date corupte.

Experimentarea cu tipuri de interpolare poate da rezultate mai bune.

Iată două metode de interpolare (splice și polynomial necesită o order argument):

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

Acestea au ca rezultat:

Cum să umpleți NaN într-un Pandas DataFrame PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Și:

Cum să umpleți NaN într-un Pandas DataFrame PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Timestamp-ul:

Mai mult de la Stackabuse