Hogyan töltsünk ki NaN-eket egy Pandas DataFrame PlatoBlockchain Data Intelligence rendszerben. Függőleges keresés. Ai.

NaN-ek kitöltése Pandas DataFrame-ben

A hiányzó értékek gyakoriak, és emberi hiba, műszerhiba, egy másik csapat feldolgozása vagy más módon csak egy bizonyos megfigyeléshez szükséges adatok hiánya miatt fordulnak elő.

Ebben a bájtban megnézzük, hogyan lehet NaN-eket kitölteni a DataFrame, ha úgy dönt, hogy a NaN-eket kitöltésével kezeli.

Először is hozzunk létre egy modellt DataFrame néhány véletlenszerű érték kiesésével:

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

Ábrázoljuk mondjuk a harmadik oszlopot:

plt.plot(df['Col3'])

Különféle technikákkal kitöltve ez a NaN-nel töltött grafikon helyettesíthető a következővel:

Hogyan töltsünk ki NaN-eket egy Pandas DataFrame PlatoBlockchain Data Intelligence rendszerben. Függőleges keresés. Ai.

fillna() – Átlag, Medián, Mód

Ezeket az értékeket kitöltheti egy új oszlopba, és hozzárendelheti a kitölteni kívánt oszlophoz, vagy helyben a segítségével inplace érv. Itt a kitöltött értékeket egy új oszlopban bontjuk ki az ellenőrzés megkönnyítése érdekében:

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)

Az oszlop mediánja, átlaga és módusa: -0.187669, -0.110873 és a 0.000000 és ezeket az értékeket minden egyes NaN esetében alkalmazzuk. Ez gyakorlatilag állandó értékekkel tölti fel, ahol a bevitt érték az oszlop bejegyzésétől függ.

Először is, a medián értékekkel való kitöltése a következőket eredményezi:

Hogyan töltsünk ki NaN-eket egy Pandas DataFrame PlatoBlockchain Data Intelligence rendszerben. Függőleges keresés. Ai.

Átlagos értékekkel:

Hogyan töltsünk ki NaN-eket egy Pandas DataFrame PlatoBlockchain Data Intelligence rendszerben. Függőleges keresés. Ai.

Módértékekkel:

Hogyan töltsünk ki NaN-eket egy Pandas DataFrame PlatoBlockchain Data Intelligence rendszerben. Függőleges keresés. Ai.

fillna() – Állandó érték

Ehelyett állandó értékkel is kitöltheti:

Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!

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

Ez azt eredményezi, hogy minden NaN helyett egy állandó értéket (0) adunk meg. 0 közel van a mediánunkhoz és az átlagunkhoz, és egyenlő a módussal, így a kitöltött értékek nagyon hasonlítanak ehhez a módszerhez az áladatkészletünk esetében:

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

Hogyan töltsünk ki NaN-eket egy Pandas DataFrame PlatoBlockchain Data Intelligence rendszerben. Függőleges keresés. Ai.

fillna() – Előre és hátrafelé történő kitöltés

Minden sorban végezhet előre vagy hátra kitöltést, az értéket az előtti vagy utáni sorból veheti át:

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

Előre kitöltéssel, mivel a 2. sorból hiányozunk – az 1. sor értékét veszik a második sor kitöltésére. Az értékek előre terjednek:

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

Hogyan töltsünk ki NaN-eket egy Pandas DataFrame PlatoBlockchain Data Intelligence rendszerben. Függőleges keresés. Ai.

A visszafelé történő kitöltéssel az ellenkezője történik. A 2. sor a 3. sor értékével van kitöltve:

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

Hogyan töltsünk ki NaN-eket egy Pandas DataFrame PlatoBlockchain Data Intelligence rendszerben. Függőleges keresés. Ai.

Bár ha több is van NaN sorozatban – ezek nem működnek jól, és a NaN-eket lejjebb kaszkádozhatják, elferdítve az adatokat és eltávolítva a ténylegesen rögzített értékeket.

interpolál()

A interpolate() módszer az értékek interpolációját a SciPy-re delegálja módszerek sorozata az értékek interpolálására. Sokféle érvet elfogad, többek között nearest, zero, slinear, quadratic, cubic, spline, barycentric, polynomial, krogh, piecewise_polynomial, spline, pchip, akima, cubicsplineStb

Az interpoláció sokkal rugalmasabb és „okosabb”, mint az értékek konstansokkal vagy félváltozókkal való kitöltése, mint például a korábbi módszerek.

Az interpoláció olyan módon tudja megfelelően kitölteni a sorozatot, ahogy azt semmilyen más módszer nem tudja, például:

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

Az alapértelmezett interpoláció lineáris, és ezt feltételezve 1...5 valószínű a 1, 2, 3, 4, 5 a sorozat nem távoli (de nem garantált). Mind az állandó kitöltés, mind az előre vagy hátrafelé történő kitöltés itt csúnyán kudarcot vall. Általánosságban elmondható, hogy az interpoláció általában jó barát, ha zajos jelekben vagy sérült adatkészletekben NaN-eket kell kitölteni.

Az interpolációs típusokkal való kísérletezés jobb eredményeket hozhat.

Itt van két interpolációs módszer (splice és a polynomial igényelnek egy order érv):

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

Ezek a következőket eredményezik:

Hogyan töltsünk ki NaN-eket egy Pandas DataFrame PlatoBlockchain Data Intelligence rendszerben. Függőleges keresés. Ai.

És:

Hogyan töltsünk ki NaN-eket egy Pandas DataFrame PlatoBlockchain Data Intelligence rendszerben. Függőleges keresés. Ai.

Időbélyeg:

Még több Stackabus