Puuttuvien arvojen poistaminen
Poistakaa NaN-arvoja sisältävät rivit tai sarakkeet dropna()-menetelmällä ja määrittäkää käsiteltävien sarakkeiden vähimmäismäärä sekä osajoukko.
Puuttuvien arvojen poistaminen on ilmainen Pandas & NumPy Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Pandas & NumPy Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Pandas & NumPy Academy-kurssilla on yhteensä 4 oppituntia.
Milloin puuttuvat arvot kannattaa poistaa?
Puuttuvia arvoja sisältävien rivien poistaminen on yksinkertaisin imputointistrategia, mutta se on pätevä vain, kun tiedot puuttuvat täysin satunnaisesti (MCAR) — toisin sanoen arvon puuttumisen todennäköisyys ei riipu itse puuttuvasta arvosta tai mistään muusta muuttujasta. Jos puuttuminen on systemaattista (esimerkiksi pienituloiset vastaajat jättävät palkkakentän tyhjäksi), rivien poistaminen aiheuttaa harhaa. Selvitä puuttumisen kaava aina ennen poistopäätöstä.
import pandas as pd
import numpy as np
# Example: randomly missing salary data (MCAR-like)
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Carol', 'Dave'],
'salary': [50000, np.nan, 70000, np.nan]
})
print('Before drop:', df.shape) # (4, 2)
print(df)dropna() — Peruskäyttö
DataFrame.dropna() poistaa oletusarvoisesti kaikki rivit, joissa on vähintään yksi NaN-arvo. Se palauttaa uuden DataFramen; alkuperäinen säilyy muuttumattomana, ellet välitä parametria inplace=True. Pienissä ja keskisuurissa aineistoissa tämä oletustoiminta sopii usein nopeaksi datan puhdistamisen ensimmäiseksi vaiheeksi.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [1, np.nan, 3, np.nan],
'b': [10, 20, np.nan, 40],
'c': [100, 200, 300, 400]
})
cleaned = df.dropna()
print(cleaned)
# a b c
# 0 1.0 10.0 100
print('Original shape:', df.shape) # (4, 3)
print('Cleaned shape:', cleaned.shape) # (1, 3)how='all' — Poista vain kokonaan NaN-arvoja sisältävät rivit
Parametrin how='all' välittäminen käskee dropna-metodia poistamaan rivin vain, jos jokainen sen arvo on NaN. Tämä on paljon varovaisempi tapa kuin oletusarvo how='any'. Käytä how='all'-asetusta, kun aineistossa on harvoja rivejä — jonkin verran tietoja sisältävät rivit kannattaa säilyttää, kun taas kokonaan tyhjät rivit ovat selvästi tarpeettomia tietueita.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [1, np.nan, np.nan],
'b': [2, np.nan, np.nan],
'c': [3, 4, np.nan]
})
# Row 2 has ALL NaN — dropped
# Row 1 has partial NaN — kept with how='all'
cleaned = df.dropna(how='all')
print(cleaned)
# a b c
# 0 1.0 2.0 3.0
# 1 NaN NaN 4.0subset= — Tarkista vain tietyt sarakkeet
subset-parametri rajoittaa niiden sarakkeiden määrää, joista NaN-arvot tarkistetaan päätettäessä, poistetaanko rivi. Tämä on erittäin hyödyllistä, kun vain tietyt sarakkeet ovat kriittisiä — esimerkiksi rivi tulee poistaa, jos user_id- tai target-sarake puuttuu, mutta NaN-arvo valinnaisessa piirre-sarakkeessa voidaan hyväksyä.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'user_id': [1, np.nan, 3],
'score': [88, 95, np.nan],
'notes': ['ok', 'good', np.nan]
})
# Drop row only if user_id is missing — score and notes NaN are ok
cleaned = df.dropna(subset=['user_id'])
print(cleaned)
# user_id score notes
# 0 1.0 88.0 ok
# 2 3.0 NaN NaNthresh= — Ei-tyhjien arvojen vähimmäismäärä
thresh-parametri säilyttää rivin vain, jos siinä on vähintään thresh ei-NaN-arvoa. Tämä on hienojakoisempi vaihtoehto kuin how='any' tai how='all': voit esimerkiksi määrittää, että rivi säilytetään, jos vähintään kolmessa viidestä sarakkeesta on tietoja. Tämä on hyödyllistä aineistoissa, joissa jonkin verran puuttuvuutta odotetaan, mutta kokonaan tyhjät rivit halutaan poistaa.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [1, np.nan, np.nan],
'b': [2, 3, np.nan],
'c': [4, np.nan, np.nan],
'd': [5, 6, np.nan]
})
# Keep rows with at least 3 non-null values
cleaned = df.dropna(thresh=3)
print(cleaned)
# a b c d
# 0 1.0 2.0 4.0 5.0
# 1 NaN 3.0 NaN 6.0Sarakkeiden poistaminen rivien sijaan
Oletusarvoisesti dropna() poistaa rivejä (axis=0). Välitä parametriksi axis=1 (tai axis='columns'), jos haluat poistaa sen sijaan sarakkeet, joissa on yksikin NaN-arvo. Tämä sopii tilanteeseen, jossa sarake on enimmäkseen tyhjä ja sisältää vain vähän hyödyllistä tietoa — sen säilyttäminen lisäisi vain kohinaa malliin tai yhteenvetotaulukkoon.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'id': [1, 2, 3],
'name': ['A', 'B', 'C'],
'temp': [np.nan, np.nan, np.nan], # completely empty column
'score': [80, 90, 85]
})
# Drop columns that have any NaN
cleaned = df.dropna(axis=1)
print(cleaned)
# id name score
# 0 1 A 80
# 1 2 B 90
# 2 3 C 85Sarakkeiden poistaminen puuttuvien arvojen raja-arvon perusteella
Tehokas toimintamalli on poistaa sarakkeet, joissa puuttuvien arvojen prosenttiosuus ylittää tietyn rajan. Laske puuttuvien arvojen osuus sarakkeittain, tunnista rajan (esimerkiksi 50 %) ylittävät sarakkeet ja poista ne komennolla df.drop(columns=cols_to_drop). Tämä on kohdennetumpi tapa kuin dropna(axis=1), joka poistaa jokaisen sarakkeen, jossa on yksikin NaN-arvo.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [1, 2, np.nan, 4, 5],
'b': [np.nan, np.nan, np.nan, np.nan, 5], # 80% missing
'c': [1, np.nan, 3, 4, 5] # 20% missing
})
threshold = 0.5
high_missing = df.columns[df.isna().mean() > threshold]
print('Dropping:', high_missing.tolist()) # ['b']
cleaned = df.drop(columns=high_missing)
print(cleaned)Indeksin säilyttäminen dropna()-metodin jälkeen
dropna()-metodin kutsumisen jälkeen alkuperäiset rivi-indeksit säilyvät — jos rivit 1 ja 3 poistettiin, jäljelle jäävän DataFramen indeksit ovat 0, 2 ja 4. Tämä on usein toivottavaa, koska alkuperäisiin kohtiin voi palata, mutta joskus haluat siistin juoksevan indeksin, joka alkaa arvosta 0. Numeroi rivit uudelleen kutsumalla poiston jälkeen .reset_index(drop=True)-metodia.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'val': [1, np.nan, 3, np.nan, 5]
})
cleaned = df.dropna()
print('With original index:')
print(cleaned) # indices 0, 2, 4
cleaned_reset = cleaned.reset_index(drop=True)
print('With reset index:')
print(cleaned_reset) # indices 0, 1, 2dropna() työnkulussa
Koska dropna() palauttaa DataFramen, se sopii luontevasti osaksi metodikutsuketjua. dropna()-metodin ketjuttaminen lataus- ja analyysivaiheiden väliin on selkeä tapa pitää työnkulku luettavana ilman väliaikaisia muuttujia. Voit ketjuttaa sen myös metodien query(), assign() ja groupby() kanssa.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'region': ['East', 'West', None, 'East'],
'revenue': [100, np.nan, 300, 400]
})
result = (
df
.dropna(subset=['region', 'revenue'])
.groupby('region')['revenue'].sum()
)
print(result)
# region
# East 500.0
# dtype: float64Milloin ei pidä poistaa: suosi täyttämistä
Rivien poistaminen hävittää dataa. Sarakkeissa, joissa puuttuvia arvoja on alle 5–10 %, täyttäminen (imputointi) on yleensä parempi vaihtoehto kuin poistaminen. Jos puuttuvat arvot korreloivat kohdemuuttujan kanssa (Missing Not At Random, MNAR), niiden poistaminen aiheuttaa lisäksi harhaa. Nyrkkisääntö: poista arvoja vain, kun puuttuminen on todella satunnaista, aineisto on riittävän suuri niin, etteivät menetetyt rivit merkitsevästi haittaa, eikä sarake tai rivi sisällä palautettavissa olevaa informaatiota.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'user': ['Alice', 'Bob', 'Carol', 'Dave'],
'age': [25, np.nan, 30, np.nan]
})
missing_pct = df['age'].isna().mean()
print(f'Missing age: {missing_pct:.0%}') # 50%
# 50% missing is high — consider imputing instead of dropping
# df['age'].fillna(df['age'].median(), inplace=True)Käytännöllinen puhdistustyönkulku
Käytännöllinen puuttuvien arvojen käsittelytyönkulku yhdistää useita dropna-strategioita: poista ensin kokonaan tyhjät rivit, sitten sarakkeet, joista yli 60 % on tyhjiä, sen jälkeen rivit, joilta puuttuvat tärkeät tunniste- tai kohdesarakkeet, ja täytä lopuksi jäljelle jäävät yksittäiset NaN-arvot. Tämä kerroksittainen lähestymistapa säilyttää mahdollisimman paljon dataa.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'id': [1, 2, 3, np.nan],
'feature': [1.0, np.nan, 3.0, 4.0],
'useless': [np.nan, np.nan, np.nan, np.nan]
})
clean = (
df
.dropna(how='all') # remove all-NaN rows
.drop(columns=df.columns[df.isna().mean() > 0.9]) # remove >90% empty cols
.dropna(subset=['id']) # must have an ID
)
print(clean)
# id feature
# 0 1.0 1.0
# 1 2.0 NaN
# 2 3.0 3.0Pikatarkistus
Testaa ymmärryksesi puuttuvien arvojen poistamisesta dropna()-menetelmällä.
Oppitunnin kertaus
Tässä oppitunnissa opit, että dropna() poistaa oletusarvoisesti NaN-arvoja sisältävät rivit, how='all' poistaa vain kokonaan tyhjät rivit, subset= rajoittaa tarkistuksen tiettyihin sarakkeisiin ja thresh= säilyttää rivit, joissa on vähintään tietty määrä ei-null-arvoja. Poista sarakkeita rivien sijaan käyttämällä axis=1. Seuraavaksi täytämme puuttuvia arvoja sen sijaan, että poistaisimme niitä, käyttämällä fillna()-menetelmää.
Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”Puuttuvien arvojen poistaminen” ilmainen?
Kyllä – oppitunnin ”Puuttuvien arvojen poistaminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Pandas & NumPy Academy-kurssin, päivitä CoddyKit PROhon. Pandas & NumPy Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Puuttuvien arvojen poistaminen”?
Poistakaa NaN-arvoja sisältävät rivit tai sarakkeet dropna()-menetelmällä ja määrittäkää käsiteltävien sarakkeiden vähimmäismäärä sekä osajoukko. Harjoittelet Pandas & NumPy Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Pandas & NumPy Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Pandas & NumPy Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Puuttuvien arvojen poistaminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Pandas & NumPy Academy-oppitunnilla?
Kyllä. Jokainen Pandas & NumPy Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Puuttuvien arvojen tunnistaminen
- Puuttuvien arvojen poistaminen
- Puuttuvien arvojen täyttäminen
- Interpolointi ja edistynyt imputointi