Gegevens bewerken met pandas

Ruwe gegevens zijn zelden direct klaar voor analyse. In dit materiaal leer je hoe je een pandas-DataFrame op orde brengt: ontbrekende waarden en dubbele rijen opsporen en verwerken, waarden vervangen, aan andere waarden toewijzen en in klassen indelen, tekst opschonen met tekenreeksmethoden en reguliere expressies, en herhaalde labels als categorische waarden opslaan. Daarna combineer je tabellen met merge, join en concat en zet je ze met hiërarchische indexen, stack, unstack, pivot en melt om tussen lang en breed formaat. Bij elke methode krijg je een klein uitgewerkt voorbeeld en zie je op welke fouten je moet letten, zoals samenvoegingen die ongemerkt rijen toevoegen.

GemiddeldLes 4 van 8 in Cursus Data-analyse met Python: NumPy, pandas en visualisatie

Wat je leert

  1. Spoor ontbrekende waarden en dubbele rijen in een pandas-DataFrame op, bepaal of je ze verwijdert, aanvult of behoudt en controleer wat elke keuze met de gegevens doet.
    • Spoor ontbrekende waarden in een DataFrame op
      Herken hoe pandas ontbrekende gegevens markeert, tel ze per kolom en per rij en spoor verborgen codes op die ontbrekende waarden aanduiden.
    • Verwijder of vul ontbrekende waarden aan
      Verwijder onvolledige rijen of kolommen met dropna, of vul ontbrekende waarden aan met vaste waarden, statistieken, naburige waarden of interpolatie. Kies de methode die bij de gegevens past.
    • Spoor dubbele rijen op en verwijder ze
      Markeer en verwijder herhaalde rijen met duplicated en drop_duplicates, vergelijk zo nodig alleen sleutelkolommen en behoud de juiste kopie van elk record.
  2. Wijzig waarden in een kolom op een beheerste manier: vervang codes, wijs waarden toe via een opzoektabel, converteer datatypes, hernoem labels en zet getallen om in groepen, geschaalde waarden en indicatorkolommen.
    • Vervang waarden, wijs ze aan andere waarden toe en converteer ze
      Vervang exacte waarden met replace, wijs waarden via een dictionary of functie aan andere waarden toe met map, hernoem rijen en kolommen en converteer tekst veilig naar getallen.
    • Deel waarden in klassen in, schaal ze, begrens ze en codeer ze
      Deel getallen met cut en qcut in intervallen in, herschaal kolommen, begrens extreme waarden met clip en maak indicatorkolommen voor categorieën.
  3. Standaardiseer en doorzoek tekstkolommen met de str-accessor en reguliere expressies en sla kolommen met een vaste verzameling waarden efficiënt op als categorische kolommen.
    • Schoon tekstkolommen op met tekenreeksmethoden
      Gebruik de gevectoriseerde str-methoden om tekst in alle rijen van een kolom tegelijk bij te snijden, het hoofdlettergebruik te wijzigen, te splitsen, te doorzoeken, te vervangen en samen te voegen.
    • Zoek patronen en haal tekst eruit met reguliere expressies
      Schrijf eenvoudige reguliere expressies en gebruik ze met contains, extract, findall en replace om gestructureerde tekstdelen te testen, eruit te halen en op te schonen.
    • Gebruik het categorische datatype
      Converteer kolommen met een beperkte verzameling waarden naar categorische kolommen, werk met hun categorieën en codes en gebruik geordende categorieën voor waarden met een natuurlijke volgorde.
  4. Breng gegevens uit meerdere tabellen samen: koppel rijen op sleutelkolommen of indexlabels met merge en join, vul ontbrekende waarden aan vanuit een tweede bron en stapel tabellen met concat.
    • Voeg DataFrames samen op sleutelkolommen
      Combineer twee tabellen met merge door waarden in sleutelkolommen te koppelen, kies het type join en controleer het resultaat op rijen zonder overeenkomst en op vermenigvuldigde rijen.
    • Koppel tabellen op de index en vul ontbrekende waarden aan vanuit een andere tabel
      Voeg samen op indexlabels met join of left_index en right_index en gebruik combine_first en uitlijning op labels om ontbrekende waarden vanuit een tweede bron aan te vullen.
    • Stapel DataFrames met concat
      Voeg tabellen met pd.concat samen langs rijen of kolommen, bepaal de resulterende index en kolommen en geef aan waar elk deel vandaan komt.
  5. Werk met tabellen met meerdere indexniveaus en zet gegevens met stack, unstack, pivot en melt om tussen lang en breed formaat.
    • Werk met hiërarchische indexen
      Maak en lees een MultiIndex, selecteer gegevens op buitenste en binnenste niveaus, wijzig de volgorde van niveaus en sorteer ze, en verplaats niveaus tussen de index en de kolommen.
    • Herstructureer gegevens met stack en unstack
      Verplaats kolomlabels met stack naar de index en indexniveaus met unstack naar kolommen, en verwerk de ontbrekende combinaties die bij het herstructureren zichtbaar worden.
    • Zet gegevens met pivot en melt om tussen lang en breed formaat
      Herken lange en brede indelingen, zet lange gegevens met pivot of pivot_table om in een brede tabel en zet een brede tabel met melt om in lange gegevens.

Gegevens bewerken met pandas: uitleg

5 hoofdstukken

1

Spoor ontbrekende waarden en duplicaten op en verwerk ze

Een ontbrekende waarde, een nul en een herhaald record hebben verschillende betekenissen. Leer hoeveel gegevens ontbreken voordat je kiest wat je behoudt, verwijdert of schat, en herken duplicaten aan de kolommen die een record definiëren. Kleine weer- en besteltabellen laten zien hoe pandas deze beslissingen verwerkt en hoe ze rijaantallen, datatypes en statistieken beïnvloeden. Elke wijziging heeft een zichtbaar resultaat dat je kunt controleren voordat je verdergaat met een analyse.

1.1 Zoek ontbrekende waarden voordat je gaat rekenen

Ontbrekende gegevens betekenen dat een waarde onbekend of niet beschikbaar is. pandas slaat op die plaats een speciale markering op. Spoor die markering op voordat je totalen berekent of bepaalt welke rijen bruikbaar zijn.

Herken de markeringen

De markering hangt af van het datatype. Float-kolommen gebruiken NaN, datetime-kolommen gebruiken NaT en datatypes met ondersteuning voor ontbrekende waarden, zoals "Int64", "boolean" en "string", gebruiken pd.NA. pandas 3 leidt voor tekstkolommen het type str af, met NaN voor ontbrekende tekst. Ook Python's None wordt als ontbrekend herkend. Gebruik import pandas as pd en import numpy as np voor de voorbeelden.

df.isna() maakt een booleaanse tabel met dezelfde rijen en kolommen als df. Een True markeert een ontbrekende waarde; df.notna() markeert aanwezige waarden. De alternatieve namen isnull() en notnull() doen hetzelfde. Vergelijk een kolom niet met np.nan: NaN is zelfs niet gelijk aan zichzelf, dus s == np.nan vindt de ontbrekende waarden niet.

Tel cellen en getroffen rijen

Bekijk deze weermetingen:

citytemp_crain_mm
Lima18,00,0
OsloNaN4,0
Pune31,0NaN
KyivNaNNaN

Een booleaanse True telt als 1, dus df.isna().sum() geeft 0 ontbrekende steden, 2 temperaturen en 2 neerslagmetingen. df.isna().mean() geeft aandelen van 0,0; 0,5 en 0,5. Voor het aandeel van elke kolom zijn alle vier de rijen de noemer.

Gebruik df.isna().any(axis=1) om getroffen rijen te vinden. Dit geeft False, True, True, True terug; optellen geeft 3. Daarentegen geeft df.isna().sum().sum() 4 ontbrekende cellen. Kyiv draagt twee cellen bij, maar slechts één getroffen rij. Gebruik de maat die antwoord geeft op je vraag.

Herken verborgen codes voor ontbrekende waarden

Een instrument kan een niet-beschikbare meting vastleggen als -999, "-" of "unknown". Dit zijn gewone waarden totdat je ze converteert. Nadat je de betekenis van de code hebt bevestigd, gebruik je df.replace([-999, "unknown"], np.nan). Bij het inlezen van CSV voegt na_values=[-999, "unknown"] deze codes toe aan de herkende markeringen. Lege CSV-velden en veelvoorkomende tekenreeksen zoals "NA", "n/a" en "NULL" worden standaard al herkend.

Een neerslagmeting van nul kan betekenen dat er geen regen is gevallen, dus als je elke nul vervangt, vernietig je echte waarnemingen. Ook zijn een lege tekenreeks die in het geheugen is gemaakt, "", en een tekenreeks met spaties voor isna() niet ontbrekend. Inspecteer opgeslagen tekst en tel niet alleen de markeringen. Gebruik value_counts(dropna=False) om ontbrekende categorieën in een frequentietabel op te nemen.

Controleer berekeningen en datatypes

Voor s = pd.Series([4, np.nan, 8]) is s.mean() 6,0: de methode gebruikt de twee bekende waarden. s.count() is 2, terwijl len(s) 3 is. Als je s.sum() deelt door len(s), krijg je 4,0 en behandel je de ontbrekende waarde ten onrechte als nul. De meeste statistieken slaan ontbrekende waarden standaard over; een kolom met uitsluitend ontbrekende waarden heeft som 0 maar gemiddelde NaN.

Een ontbrekende waarde kan ook de opslag veranderen. pd.Series([3, None, 5]) wordt float64 en bevat 3,0; NaN en 5,0. Met dtype="Int64" blijven de gehele waarden behouden en staat <NA> voor de ontbrekende waarde. De hoofdletter I duidt het pandas-geheelgetaltype met ondersteuning voor ontbrekende waarden aan.

Belangrijkste punten

  • Gebruik isna() om markeringen voor ontbrekende waarden in verschillende datatypes op te sporen.
  • Tel ontbrekende cellen afzonderlijk van rijen met minstens één ontbrekende waarde.
  • Converteer codes waarvan vaststaat dat ze ontbreken betekenen; behoud geldige nullen.
  • Controleer hoeveel bekende waarden voor een statistiek worden gebruikt.
  • Gebruik "Int64" als gehele waarden een markering voor ontbrekende waarden nodig hebben.

1.2 Kies wat je verwijdert of aanvult

Als je een rij verwijdert, verwijder je behalve de ontbrekende waarden ook de bekende waarden. Als je een ontbrekende waarde aanvult, behoud je de rij maar voeg je een schatting toe. Kies op basis van de betekenis van de waarneming en de kolommen die de analyse nodig heeft.

Bepaal welke rijen worden verwijderd

df.dropna() verwijdert elke rij met een ontbrekende waarde. In de weertabel blijft alleen Lima over. Beperk de keuze met subset of stel met thresh een minimumaantal aanwezige cellen in.

AanroepBehouden rijenReden
df.dropna(subset=["temp_c"])Lima, PuneTemperatuur is aanwezig
df.dropna(thresh=2)Lima, Oslo, PuneMinstens twee cellen zijn aanwezig
df.dropna(how="all")Alle vierElke rij heeft een stad

axis="columns" verwijdert kolommen met ontbrekende waarden en behoudt hier alleen city. In een brede tabel kan de standaardregel voor rijen veel gegevens verwijderen, omdat een ontbrekende waarde in een willekeurige kolom al genoeg is. Vergelijk len(df) voor en na het verwijderen.

Ken het resultaat toe

Leer de vorm met een nieuwe toekenning: df = df.dropna(). Opschoningsmethoden geven standaard een nieuw object terug. pandas 3.1 raadt inplace=True af voor onder meer de methoden dropna, drop_duplicates en rename.

Voor één kolom schrijf je df["temp_c"] = df["temp_c"].fillna(0). Een geketende aanroep zoals df["temp_c"].fillna(0, inplace=True) wijzigt het bovenliggende DataFrame nooit onder het kopiëren bij schrijven van pandas 3. Met een toekenning maak je duidelijk waar het resultaat terechtkomt.

Vul aan met een passende waarde

Met een dictionary per kolom kun je een gemengde tabel passende waarden geven: df.fillna({"rain_mm": 0, "city": "Unknown"}). Kolommen die niet in de dictionary staan behouden hun ontbrekende waarden. Een scalaire waarde zoals 0 is handig voor een tabel met alleen numerieke waarden waarvan alle kolommen die waarde accepteren. Tekst aanvullen met een getal is niet toegestaan; pandas 3.1 waarschuwt hiervoor en een toekomstige versie zal het afwijzen.

De bekende temperaturen zijn 18,0 en 31,0. Hun gemiddelde is 24,5, dus df["temp_c"].fillna(df["temp_c"].mean()) vult beide ontbrekende waarden met 24,5. Een extreme waarde kan het gemiddelde sterk beïnvloeden; de mediaan is minder gevoelig. Bewaar vóór het aanvullen een indicator met df["temp_missing"] = df["temp_c"].isna(), zodat geschatte en waargenomen waarden te onderscheiden blijven.

Aanvullen met het gemiddelde verkleint de zichtbare spreiding van de kolom. Een ver verwijderde vaste waarde kan die vergroten. Als je neerslag aanvult met 0, stel je dat er geen regen is gevallen; dat is ongepast als een sensor uitstond.

Gebruik naburige metingen als de volgorde ertoe doet

ffill() neemt de laatst bekende waarde vooruit over; bfill() neemt de eerstvolgende bekende waarde achteruit over. Voor 12,0; NaN; NaN; NaN; 15,0 geeft voorwaarts opvullen vier waarden van 12,0 gevolgd door 15,0. ffill(limit=1) vult alleen de eerste ontbrekende waarde in die reeks aan. Een ontbrekende waarde aan het begin heeft geen vorige waarde en blijft ontbreken. Gebruik ffill() rechtstreeks; fillna(method="ffill") is in pandas 3 verwijderd.

interpolate() schat tussen naburige posities. Voor 10, NaN, NaN, 16 geeft lineaire interpolatie 10, 12, 14, 16. Dit past bij geleidelijk veranderende metingen in een betekenisvolle volgorde. Waarden overnemen of interpoleren tussen steden die geen verband hebben, zou een relatie opleggen die de rijen niet hebben.

Voer na elke bewerking isna().sum() opnieuw uit en controleer ook de rijaantallen. Een geslaagde methodeaanroep vertelt je dat de code is uitgevoerd; deze controles laten zien wat er is veranderd.

Belangrijkste punten

  • Gebruik subset, how of thresh om aan te geven welke ontbrekende waarden ertoe doen.
  • Ken teruggegeven resultaten toe aan het DataFrame of de kolom die je wilt wijzigen.
  • Kies opvulwaarden die passen bij zowel het datatype van de kolom als de betekenis van de ontbrekende waarde.
  • Bewaar een indicator voor ontbrekende waarden voordat je geschatte waarden invult.
  • Gebruik methoden met naburige waarden alleen als de rijvolgorde betekenisvol is.
  • Controleer na het opschonen de aantallen rijen en ontbrekende waarden.

1.3 Bepaal wat een record is voordat je kopieën verwijdert

Twee rijen kunnen op elkaar lijken zonder dezelfde gebeurtenis te beschrijven. Bepaal voordat je duplicaten verwijdert welke waarden één record identificeren. Een bestel-ID kan een bestelling identificeren; een klant en datum alleen kunnen meerdere geldige aankopen aanduiden.

Markeer de extra kopieën

df.duplicated() geeft één booleaanse waarde per rij terug. Standaard vergelijkt de methode alle kolommen, behoudt ze de eerste keer dat een rij voorkomt en markeert ze latere kopieën met True. Als je het resultaat optelt, tel je extra kopieën, niet alle leden van herhaalde groepen.

Bekijk zes bestelrijen met ID's 101, 102, 102, 103, 104, 104. De twee rijen voor 102 zijn identiek. De twee rijen voor 104 hebben verschillende geregistreerde gewichten, 0,5 kg en 0,8 kg. Als alle kolommen worden vergeleken, is er één extra kopie: df.duplicated().sum() is 1. df.drop_duplicates() behoudt vijf rijen omdat de twee verschillende rijen voor 104 geen exacte kopieën zijn.

Vergelijk de kolommen die de identiteit bepalen

df.duplicated(subset=["order_id"]) vergelijkt alleen ID's. Dit markeert de tweede 102 en de tweede 104, wat twee extra kopieën geeft. De waarden in de andere kolommen beïnvloeden deze beslissing niet meer. Inspecteer de tegenstrijdige gewichten voordat je kiest welk bestelrecord je behoudt.

Waarde van keepGedrag bij een herhaalde groep
"first"Behoud de eerste rij in de huidige volgorde
"last"Behoud de laatste rij in de huidige volgorde
FalseVerwijder elk lid van een herhaalde groep

df.drop_duplicates(subset="order_id", keep="last") behoudt in deze volgorde de versie van 0,8 kg van bestelling 104. De laatste rij behouden betekent op zichzelf niet dat je het nieuwste record behoudt. Stel die volgorde eerst vast:

latest = df.sort_values("updated").drop_duplicates(
    subset="customer_id", keep="last"
)

Sorteren op updated plaatst oudere records vóór nieuwere. De controle op duplicaten vergelijkt daarna alleen customer_id, zodat verschillende bijwerktijden niet verhinderen dat twee rijen als versies van dezelfde klant worden herkend.

Onderscheid rijwaarden van indexlabels

Deze methoden vergelijken waarden en negeren indexlabels. Identieke rijen met de labels 4 en 9 tellen nog steeds als duplicaten. Ontbrekende waarden op overeenkomstige posities tellen bij deze controle als gelijk. Gebruik df.index.duplicated() om de labels zelf op herhaling te controleren.

Een exacte vergelijking behoudt ook verschillen in hoofdletters en witruimte. De waarden “ Lisbon”, “lisbon” en “LISBON ” zijn verschillend. Schoon ze op met .str.strip().str.lower() voordat je op duplicaten controleert als deze schrijfwijzen dezelfde stad aanduiden. Anders telt nunique() drie namen voor één plaats.

Controleer uniciteit waar de relatie dat vereist

Een opzoektabel hoort één rij per opzoeksleutel te hebben als elk record één set gegevens moet krijgen. lookup["customer_id"].is_unique controleert die eis. Herhaalde klant-ID's in een besteltabel zijn normaal, omdat een klant meerdere bestellingen kan plaatsen.

Als een opzoeksleutel wordt herhaald, herhaalt een latere samenvoeging elke bijpassende bestelling voor elke bijpassende rij in de opzoektabel. Als je duplicaten uit de bestellingen verwijdert, gooi je echte aankopen weg zonder de opzoektabel te herstellen. Controleer de bedoelde sleutel in de juiste tabel, inspecteer tegenstrijdige records en vergelijk het aantal rijen na het verwijderen.

Belangrijkste punten

  • Definieer een record met de juiste sleutelkolommen voordat je kopieën verwijdert.
  • duplicated().sum() telt latere kopieën met de standaardinstelling keep="first".
  • Sorteer op bijwerktijd voordat je het nieuwste record behoudt.
  • Duplicaten in rijwaarden en herhaalde indexlabels vereisen afzonderlijke controles.
  • Unieke opzoeksleutels voorkomen onbedoelde vermenigvuldiging van rijen bij samenvoegingen.
2

Transformeer waarden door vervanging, waardetoewijzing en klasse-indeling

Als je een kolom transformeert, verander je de betekenis of de weergave van de waarden. Kies tussen exacte vervangingen, waardetoewijzingen, numerieke conversie, intervallen, geschaalde waarden en indicatorkolommen. Je bekijkt de invoer en uitvoer van elke methode, inclusief wat er gebeurt met waarden zonder overeenkomst en grenswaarden, zodat een handige bewerking categorieën niet ongemerkt verandert of bruikbare metingen verloren laat gaan.

2.1 Wijzig waarden en labels bewust

Een vervanging wijzigt overeenkomende waarden, een opzoektabel vertaalt waarden en een hernoeming wijzigt labels. Deze taken kunnen er in code vergelijkbaar uitzien, maar geven verschillende resultaten als een waarde niet in een dictionary staat.

Vervang exacte waarden

s.replace("N/A", np.nan) wijzigt alleen cellen die gelijk zijn aan "N/A". Een lijst kan meerdere oude waarden bevatten: s.replace(["-", "?"], np.nan). Een dictionary geeft afzonderlijke vervangingen, zoals s.replace({"M": "male", "F": "female"}). Waarden zonder overeenkomst blijven zoals ze waren.

Voor een hele tabel beperkt een geneste dictionary de wijziging tot één kolom: df.replace({"status": {0: "open", 1: "closed"}}). Zo voorkom je dat andere nullen en enen elders veranderen. Ken het teruggegeven resultaat toe om de wijziging te behouden.

replace vergelijkt volledige cellen. Bij “Main St” en “St” verandert s.replace("St", "Street") alleen “St”. Gebruik s.str.replace("St", "Street", regex=False) om delen van een tekenreeks te wijzigen; dit levert ook “Main Street” op.

Wijs waarden toe via een opzoektabel

Vergelijk voor de codes “PT”, “JP” en “KE” dezelfde dictionary in twee methoden:

MethodePTJPKE
s.map({"PT": "Portugal", "JP": "Japan"})PortugalJapanNaN
s.replace({"PT": "Portugal", "JP": "Japan"})PortugalJapanKE

Een dictionary die je aan map geeft, bepaalt de beschikbare uitvoerwaarden. Een ontbrekende sleutel heeft geen uitvoer en wordt een ontbrekende waarde. Controleer achteraf isna().sum() zodat een onvolledige opzoektabel zichtbaar wordt.

map accepteert ook een functie: s.map(lambda x: x * 1000) zet waarden in kilometers om naar meters. Voor deze berekening is s * 1000 eenvoudiger en sneller, omdat de expressie op de hele kolom werkt. DataFrame.map past een functie cel voor cel toe; het vervangt de verwijderde methode applymap.

Converteer tekst naar getallen

astype vraagt om een datatype, zoals "float64", "Int64" of "category". De methode geeft een fout als een waarde niet kan worden geconverteerd. Voor de tekst "12", "7.5" en "n/a" geeft pd.to_numeric(s, errors="coerce") daarentegen 12,0, 7,5 en NaN. Deze typeconversie met ontbrekende waarden bij fouten behoudt leesbare getallen, maar vereist dat je de mislukte conversies inspecteert.

Opmaak kan conversie verhinderen, ook als het getal geldig is. Verwijder voor “1,200” en “950” eerst het scheidingsteken voor duizendtallen:

cleaned = s.str.replace(",", "", regex=False)
numbers = pd.to_numeric(cleaned, errors="coerce")
failed = s.notna() & numbers.isna()

Hier markeert failed waarden die vóór de conversie aanwezig waren maar daarna ontbreken. Het vergelijken van aantallen ontbrekende waarden geeft een bruikbaar totaal; het masker wijst ook de oorspronkelijke tekst aan die je kunt inspecteren. Verwijder bekende eenheden op dezelfde zorgvuldige manier uit tekst met metingen voordat je converteert.

Hernoem de labels

df.rename(columns={"Qty": "quantity"}) wijzigt een kolomkop en laat de cellen ongewijzigd. df.rename(columns=str.lower) maakt alle kolomkoppen klein. Een reeks zoals df.columns.str.strip().str.lower().str.replace(" ", "_", regex=False) zet “Total KG ” om in total_kg; ken die toe aan df.columns.

Gebruik replace of map voor waarden binnen een kolom. Gebruik rename voor de labels waarmee je die waarden selecteert.

Belangrijkste punten

  • replace behoudt waarden zonder overeenkomst; map met een dictionary maakt ze ontbrekend.
  • Gebruik .str.replace om een deel van elke tekstwaarde te wijzigen.
  • Geef bij eenvoudige kolomberekeningen de voorkeur aan gevectoriseerd rekenen.
  • Inspecteer nieuw ontbrekende waarden na numerieke typeconversie met ontbrekende waarden bij fouten.
  • rename wijzigt labels en laat gegevenswaarden ongewijzigd.

2.2 Groepeer en herschaal metingen

Sommige analyses hebben exacte metingen nodig, andere groepen of vergelijkbare numerieke bereiken. Houd de oorspronkelijke betekenis helder: klasse-indeling maakt categorieën, schalen verandert de numerieke schaal en begrenzen vervangt extreme waarden.

Plaats waarden in intervallen

pd.cut(ages, [18, 30, 45, 65]) gebruikt de intervallen (18, 30], (30, 45] en (45, 65]. Het ronde haakje sluit het linkergrenspunt uit; het vierkante sluithaakje sluit het rechtergrenspunt in. De leeftijden 19, 25 en 30 vallen in het eerste interval, 41 in het tweede en 64 in het derde. Leeftijd 18 wordt ontbrekend omdat die op de uitgesloten linkergrens ligt.

include_lowest=True neemt die laagste waarde op in het eerste interval. right=False maakt daarentegen links gesloten intervallen zoals [18, 30), zodat 30 in het tweede interval valt. Waarden buiten alle intervallen blijven ontbreken. Test zowel de exacte grenzen als gebruikelijke waarden ertussen.

Er moet één label per interval zijn, één minder dan het aantal grenzen. Met labels=["18-30", "31-45", "46-65"] en include_lowest=True geven de zes leeftijden hierboven de aantallen 4, 1 en 1. Deze labels beschrijven leeftijden in hele jaren; de intervalgrenzen blijven de indeling bepalen.

Kies grenzen of groepsgroottes
BewerkingWat wordt bepaaldNuttig doel
pd.cut(x, [18, 30, 45, 65])Vaste grenzenBetekenisvolle bereiken
pd.cut(x, 4)Vier even brede intervallenWaardebereiken vergelijken
pd.qcut(x, 4)Vier groepen met ongeveer gelijke aantallenRangordes in de gegevens vergelijken

Voor 2, 4, 6, 8, 10, 12, 14, 16 geeft qcut twee waarden per kwartielgroep. Groepen met gelijke aantallen hoeven geen even brede numerieke bereiken te beslaan.

Schaal zonder groepen te maken

Min-maxschaling gebruikt (x - x.min()) / (x.max() - x.min()). Voor 10, 20, 40 is het bereik 30: de resultaten zijn 0; ongeveer 0,333 en 1. Zowel het minimum als het maximum is nodig; alleen delen door het maximum is een andere bewerking. Een constante kolom heeft een bereik van nul, dus deze expressie kan die geen bruikbare geschaalde spreiding geven.

Standaardiseren gebruikt (x - x.mean()) / x.std(). Voor 10, 20, 30 is het gemiddelde 20 en is de standaard gebruikte steekproefstandaardafwijking van pandas 10. Als je 20 aftrekt en door 10 deelt, krijg je de z-scores -1, 0 en 1. Een z-score beschrijft de afstand tot het gemiddelde in eenheden van de standaardafwijking, geen intervallabel.

Begrens en codeer

pd.Series([5, 12, 250, 8]).clip(upper=100) geeft 5, 12, 100, 8. Anders dan een filter behoudt clip de rij en vervangt het het extreme getal. Inspecteer grote waarden met describe() of een filter voordat je ze begrenst: een echte grote meting blijft een gegeven.

pd.get_dummies(s) maakt één booleaanse indicatorkolom per categorie. Bij rood, groen, rood, blauw is elke rij alleen True in de kolom van de eigen kleur. Gebruik dtype=int voor nullen en enen. Ontbrekende waarden geven uitsluitend onware indicatoren, tenzij dummy_na=True een kolom voor ontbrekende waarden toevoegt. Bij gewone kleinste-kwadratenregressie met een intercept verwijdert drop_first=True een overbodige categoriekolom; andere modellen kunnen elke categorie behouden. Met één categorie per rij telt de volledige set indicatoren op tot de constante 1 van het intercept, wat lineaire afhankelijkheid veroorzaakt.

Voor cellen met meerdere labels splitst s.str.get_dummies(sep="|") een waarde zoals “Action|Comedy” in afzonderlijke indicatoren. Je kunt ook ingedeelde intervallen aan get_dummies doorgeven, wat een kolom voor elk bereik oplevert.

Belangrijkste punten

  • Controleer bij cut de intervalgrenzen en waarden buiten het bereik.
  • cut bepaalt bereiken; qcut streeft naar vergelijkbare groepsaantallen.
  • Min-maxschaling en z-scores behouden numerieke waarden op een gewijzigde schaal.
  • clip begrenst waarden zonder rijen te verwijderen.
  • Indicatorkolommen geven aan tot welke categorie een rij behoort zonder een numerieke volgorde te verzinnen.
  • Verwerk ontbrekende categorieën expliciet als hun indicatoren van belang zijn.
3

Schoon tekst en categorische gegevens op

Tekstwaarden hebben een consistente spelling en tussenruimte nodig voordat ze als categorieën of sleutels kunnen dienen. Pas tekenreeksmethoden toe op een kolom, haal gestructureerde delen uit tekst met reguliere expressies en kies een categorisch datatype als een kleine verzameling labels zich herhaalt. De voorbeelden verbinden tekstopschoning met controles op duplicaten en samenvoegingen en laten zien hoe opgeslagen codes en de volgorde van categorieën verschillen van de woorden die je in een tabel ziet.

3.1 Maak tekstwaarden consistent

Een mens ziet dezelfde stad in “ Lisbon”, “lisbon” en “LISBON ”. pandas ziet drie verschillende tekenreeksen. Door een tekstkolom op te schonen, krijgen latere tellingen, controles op duplicaten en samenvoegingen een consistente verzameling waarden om te vergelijken.

Pas tekenreeksmethoden toe op een Series

Python's "Lima ".strip() werkt op één tekenreeks. Gebruik voor een kolom de .str-accessor: s.str.strip() verwijdert witruimte aan de buitenkant van elke aanwezige waarde. s.lower() geeft een AttributeError, omdat de Series zelf geen methode lower heeft. Gebruik s.str.lower().

pandas 3 leidt voor tekst normaal gesproken het datatype str af, dat de oudere standaard object vervangt. Het datatype str bevat tekst en ontbrekende waarden, met NaN voor ontbrekende tekst. Tekenreeksmethoden werken op beide types. Ken tekst toe aan een str-kolom; zet een getal eerst om in tekst als het daar als tekst thuishoort.

Combineer passende opschoningsbewerkingen en ken het resultaat toe:

df["city"] = df["city"].str.strip().str.lower()

De drie schrijfwijzen van Lisbon worden “lisbon”. strip() verwijdert witruimte aan de buitenkant, geen spaties binnen een naam. upper() maakt alle letters hoofdletters, terwijl title() elk woord met een hoofdletter schrijft en “new york” omzet in “New York”. Kies één consistente vorm voor sleutels en tellingen.

Splits gestructureerde tekenreeksen

Voor “Silva, Ana” en “Tanaka, Yui” geeft s.str.split(", ") lijsten terug zoals ["Silva", "Ana"]. Voeg expand=True toe om afzonderlijke kolommen te maken. Haal met .str[0] of .str.get(1) een deel uit elke lijst op.

Gebruik n=1 als alleen het eerste scheidingsteken een waarde moet splitsen. Als je “a,b,c” met n=1 bij komma's splitst, krijg je “a” en “b,c”. Zonder limiet krijg je drie delen. Gebruik exact het juiste scheidingsteken, inclusief eventuele spaties die bij het formaat horen.

Zoek en filter

s.str.contains("lis", case=False) controleert of tekst ergens voorkomt en negeert daarbij het verschil tussen hoofdletters en kleine letters. s.str.startswith("ID") controleert het begin; s.str.endswith(".csv") controleert het einde. Met de booleaanse resultaten kun je rijen selecteren:

mask = df["city"].str.contains("san", case=False, na=False)
selected = df[mask]

Bij het str-datatype van pandas 3 geeft ontbrekende tekst in deze zoektests False. Door na=False te schrijven maak je ook duidelijk hoe je ontbrekende waarden wilt behandelen bij tekenreeksgegevens die ontbrekende waarden ondersteunen. contains leest standaard een regex-patroon; voeg regex=False toe voor letterlijke tekst met speciale tekens.

Vervang delen en maak nieuwe tekenreeksen

s.str.replace("kg", "", regex=False) verwijdert “kg” overal waar het voorkomt. s.replace("kg", "") wijzigt alleen cellen die precies “kg” zijn. Dit verschil is van belang voor waarden zoals “12 kg”.

str.replace behandelt de zoektekst standaard letterlijk. Voor “3.5 kg” verwijdert .str.replace(".", "", regex=False) de punt en geeft het “35 kg”. Met regex=True is de punt een patroon voor bijna elk teken en verwijdert de methode in dit voorbeeld van één regel alle tekens. Gebruik die wijziging nooit om een decimale meting in te lezen.

s.str.len() telt tekens; een ontbrekende waarde levert NaN op en kan van het resultaat een float-kolom maken. s.str[:3] haalt de eerste drie tekens op. Om kolommen te combineren voegt df["first"] + " " + df["last"] Ana en Silva samen tot “Ana Silva”; str.cat is een andere methode om samen te voegen. Elke bewerking geeft een resultaat terug, dus sla dat op in de kolom die je wilt gebruiken.

Belangrijkste punten

  • Gebruik .str om tekstmethoden op een Series toe te passen.
  • Verwijder witruimte aan de buitenkant en standaardiseer het hoofdlettergebruik voordat je tekstsleutels vergelijkt.
  • Bepaal de uitvoer van splitsen met expand en n.
  • Kies bij speciale tekens expliciet voor letterlijk zoeken of zoeken met een reguliere expressie.
  • Ken opgeschoonde tekst opnieuw toe om de wijziging te behouden.

3.2 Haal de delen op die een tekstpatroon beschrijft

Een reguliere expressie, of regex, beschrijft een patroon in tekst. Daarmee kun je een hoeveelheid herkennen, ook als het aantal cijfers of de tussenruimte varieert. Begin met een klein patroon waarvan je de onderdelen kunt uitleggen.

Lees de onderdelen van het patroon
PatroonBetekenis
\dEén cijfer
\wEen woordteken: een letter, cijfer of onderstrepingsteken
\sEén witruimteteken
[A-Z]Eén hoofdletter in dit bereik
+Eén of meer van het voorafgaande onderdeel
*Nul of meer van het voorafgaande onderdeel
?Het voorafgaande onderdeel is optioneel
{4}Precies vier herhalingen
(…)Een vastleggroep

Schrijf Python-patronen als ruwe tekenreeksen, zoals r"\d+", zodat Python de backslashes behoudt. Een punt komt standaard overeen met elk teken behalve een nieuwe regel. Schrijf die als r"\." om een echte punt te vinden. Bij zoeken naar gewone tekst voorkomt regex=False dat de tekst als patroon wordt geïnterpreteerd.

Kies hoeveel tekst moet overeenkomen

contains vindt een patroon overal in de tekst, match begint aan het begin en fullmatch vereist dat de hele waarde overeenkomt. Voor “123a” slagen s.str.contains(r"\d+") en s.str.match(r"\d+"), maar mislukt s.str.fullmatch(r"\d+"). Gebruik de test voor de hele tekenreeks als je een volledige code controleert. Met case=False of flags=re.IGNORECASE na import re kun je hoofdletterongevoelig zoeken waar dat wordt ondersteund.

Leg een meting vast

Neem “Rice 5 kg”, “Flour 2kg”, “Salt” en “Beans 12 kg, 3 kg”. Het patroon r"(\d+)\s*kg" betekent één of meer cijfers vastgelegd als groep, gevolgd door nul of meer spaties en dan “kg”.

quantity = s.str.extract(r"(\d+)\s*kg", expand=False)
quantity = pd.to_numeric(quantity)

De opgehaalde tekenreeksen zijn “5”, “2”, een ontbrekende waarde en “12”. Conversie geeft de numerieke waarden 5,0, 2,0, NaN en 12,0. extract neemt de eerste overeenkomst in elke rij, dus de tweede hoeveelheid in de beschrijving van de bonen wordt niet meegenomen. Zonder expand=False geeft één groep een DataFrame met één kolom terug.

Benoemde groepen geven de uitvoer een naam. s.str.extract(r"(?P<year>\d{4})-(?P<month>\d{2})") vindt “2024-03” in “Report 2024-03 final” en geeft de tekstkolommen year en month terug. Het patroon herkent de indeling van de cijfers; numerieke conversie is een afzonderlijke stap.

Vind elke overeenkomst of schoon op met een patroon

findall(r"\d+") geeft een lijst per rij, waaronder ["12", "3"] voor de bonentekst en [] voor “Salt”. count(r"\d+") telt overeenkomsten. extractall geeft één rij per overeenkomst met een extra indexniveau genaamd match.

Met regex=True brengt s.str.replace(r"\s+", " ", regex=True) reeksen witruimte terug tot één spatie. r"\D" betekent een teken dat geen cijfer is, dus als je die tekens verwijdert, wordt “+351 912-345-678” omgezet in “351912345678”. De hoofdlettervormen \S en \W zijn op vergelijkbare wijze de ontkenning van de klassen voor witruimte en woordtekens.

Herhaling is standaard gretig. In "<b>x</b>" loopt r"<.*>" van het eerste openingsteken tot het laatste sluitingsteken. Als je die overeenkomst verwijdert, verdwijnt alles. Het luie patroon r"<.*?>" komt overeen met elke tag afzonderlijk en laat “x” achter. Controleer voorbeelduitvoer voordat je een patroon op een hele kolom gebruikt.

Belangrijkste punten

  • Gebruik ruwe tekenreeksen om backslashes in reguliere expressies te behouden.
  • Kies contains, match of fullmatch voor de bedoelde reikwijdte.
  • Vastleggroepen geven tekst terug; converteer opgehaalde getallen afzonderlijk.
  • extract neemt de eerste overeenkomst; findall en extractall behouden meerdere overeenkomsten.
  • Zet een backslash voor speciale tekens om ze letterlijk te zoeken met een reguliere expressie.
  • Controleer gretige patronen met voorbeelden die meerdere mogelijke overeenkomsten bevatten.

3.3 Sla herhaalde labels op als categorieën

Een kolom met enkele waarden die vaak worden herhaald, kan het datatype category gebruiken. Dat slaat de unieke labels eenmaal op en geeft elke rij weer met een kleine gehele code. De zichtbare waarde blijft het label.

Begrijp categorieën en codes

Voor de maten M, S, L, M, M leidt s.astype("category") de categorieën L, M, S af in alfabetische volgorde. De codes zijn 1, 2, 0, 1, 1. Gebruik s.cat.categories om de labels te inspecteren en s.cat.codes om de identificatiecodes te inspecteren. Een code 0 betekent de eerste opgeslagen categorie; het is geen gemeten hoeveelheid.

Bij herhaalde labels kun je aanzienlijk op geheugen besparen. Tot en met 126 categorieën gebruikt elke code één byte; bij 127 categorieën zijn dat twee bytes. In een pandas 3.1-omgeving met PyArrow gebruikten drie landnamen die over 3.000.000 rijen werden herhaald ongeveer 3 MB als categorische gegevens, ongeveer 42 MB als str en ongeveer 165 MB als object. De gebruikte methode voor tekstopslag beïnvloedt deze cijfers. Een kolom met bijna uitsluitend unieke waarden heeft geen voordeel van een categorielijst plus een code per rij.

Definieer een betekenisvolle volgorde

In alfabetische volgorde komt L vóór M en S. Definieer de werkelijke volgorde van de maten expliciet:

size_type = pd.CategoricalDtype(["S", "M", "L"], ordered=True)
sizes = s.astype(size_type)

Nu volgt sorteren de volgorde S, M, L, zijn vergelijkingen zoals sizes > "S" betekenisvol en is sizes.max() “L” als L voorkomt. Voor ongeordende labels zoals landen werken gelijkheidsvergelijkingen, maar groter-danvergelijkingen geven een TypeError. as_ordered() gebruikt de bestaande volgorde van categorieën; inspecteer die voordat je die volgorde als betekenisvol aanmerkt.

Wijzig de toegestane labels

Je kunt “XL” niet toekennen aan een categorische kolom die alleen S, M en L toestaat. Ken eerst het uitgebreide resultaat toe, sizes = sizes.cat.add_categories("XL"), en ken daarna de nieuwe waarde toe.

Als je tekst naar een vaste categorielijst converteert, kunnen waarden die niet in de lijst staan ontbrekend worden. pandas 3.1 waarschuwt dat deze conversie met gegevensverlies een fout zal worden. Controleer de bronwaarden vóór de conversie met value_counts(), vooral nadat je schrijfwijzen hebt opgeschoond.

De .cat-methoden hebben verschillende doelen:

  • rename_categories({"S": "small"}) wijzigt een label en behoudt de bijbehorende waarden.
  • remove_categories("L") verwijdert een toegestaan label en maakt bestaande L-waarden ontbrekend.
  • set_categories([...]) vervangt de hele categorielijst.
  • reorder_categories([...], ordered=True) wijzigt de volgorde zonder te wijzigen welke labels zijn toegestaan.
  • remove_unused_categories() verwijdert labels waartoe momenteel geen waarden behoren.

value_counts() toont elke toegestane categorie, ook die met nul waarnemingen. Bij een S/M/L-type dat alleen S en M bevat, verschijnt L nog steeds met aantal 0. Zo wordt een lege groep zichtbaar waarvoor gewone tekstgegevens geen label hebben opgeslagen.

Houd categorieën bruikbaar in latere stappen

cut levert categorische intervallen op en get_dummies zet categorielidmaatschap om in indicatorkolommen. Als je ongeordende landcodes als getallen aan een model geeft, leg je een kunstmatige volgorde en afstand op. Indicatoren voorkomen die interpretatie.

Als je categorische kolommen met verschillende categorielijsten concateneert, gaat het categorische datatype normaal gesproken verloren. Stem hun categorielijsten eerst op elkaar af of gebruik in pandas 3.1 pd.concat(..., union_categories=True) als het de bedoeling is de lijsten te combineren. Inspecteer zowel het resulterende datatype als de volgorde van de categorieën.

Belangrijkste punten

  • Categorische kolommen slaan een lijst met labels en gehele identificatiecodes op.
  • Definieer de volgorde van categorieën expliciet als een rangorde betekenis heeft.
  • Voeg een categorie toe voordat je een nieuw label toekent.
  • Als je een gebruikte categorie verwijdert, worden de bijbehorende waarden ontbrekend.
  • Gebruik indicatoren voor ongeordende categorieën in numerieke modellen.
  • Stem categorielijsten op elkaar af of verenig ze bewust vóór concatenatie.
4

Combineer DataFrames

Tabellen combineren kan informatie toevoegen, waarnemingen toevoegen of ontbrekende waarden vanuit een reservebron aanvullen. Dat zijn verschillende taken. Koppel expliciete sleutels met merge, werk met indexlabels via join en combine_first en stapel passende delen met concat. Voorspel voordat je een resultaat vertrouwt welke rijen behouden moeten blijven en hoeveel overeenkomsten elke sleutel moet opleveren; de voorbeelden laten zien waarom onverwachte groei vaak begint bij een herhaalde opzoeksleutel.

4.1 Voorspel wat een samenvoeging behoudt

Een samenvoeging koppelt rijen via sleutelwaarden en plaatst hun informatie naast elkaar. De sleutel moet in beide tabellen hetzelfde aanduiden, zoals de klant-ID op een bestelling en de klant-ID in een opzoektabel.

Benoem de sleutel en kies de join

Gebruik orders.merge(customers, on="customer_id"). Zonder on gebruikt pandas alle kolomnamen die beide tabellen delen. Een gedeelde kolom zonder verband, zoals date, zou dan geldige klantkoppelingen kunnen verhinderen.

Stel dat bestellingen de klant-ID's 10, 20, 20, 30, 50 hebben. De klantentabel heeft elk één rij voor 10, 20, 30, 40.

howWat blijft behoudenAantal resultaatrijen
"inner"Overeenkomende sleutels aan beide kanten4
"left"Elke linkerrij en de bijbehorende overeenkomsten5
"right"Elke rechterrij en de bijbehorende overeenkomsten5
"outer"Sleutels van beide kanten6
"cross"Elk paar van een linker- en rechterrij20

Inner is de standaardinstelling. Bij een left join ontbreken de klantgegevens voor klant 50. Een right join bevat klant 40 zonder bestelling, plus beide bestellingen voor 20. Een outer join bevat beide sleutels zonder overeenkomst. Een cross join heeft geen sleutel nodig, omdat die bewust elke rij koppelt. pandas 3 biedt ook left_anti en right_anti voor rijen zonder overeenkomende sleutel aan de andere kant.

Controleer hoeveel overeenkomsten een rij kan hebben

Twee linkerrijen voor sleutel 20 en drie rechterrijen voor sleutel 20 leveren zes paren op. De samenvoeging kiest niet één rechterrij. Als je in het voorbeeld een tweede rij voor klant 20 aan de opzoektabel toevoegt, groeit het inner-resultaat van vier naar zes rijen.

Geef de bedoelde relatie aan met validate:

merged = orders.merge(
    customers, on="customer_id", how="left",
    validate="many_to_one"
)

Dit staat veel bestellingen per klant toe, maar vereist unieke klant-ID's aan de rechterkant. Een herhaalde rechtersleutel geeft een MergeError. one_to_one vereist uniciteit aan beide kanten; one_to_many vereist die aan de linkerkant. many_to_many staat herhalingen aan beide kanten toe en controleert de uniciteit niet.

Onderzoek rijen zonder overeenkomst

Een outer join met indicator=True voegt _merge toe. Hier zijn de aantallen vier both, één left_only en één right_only. Dit zijn rijen, geen unieke sleutels: herhaalde bestellingen kunnen voor één klant meerdere both-rijen opleveren.

Gebruik m.loc[m["_merge"] == "left_only", "customer_id"].nunique() om unieke sleutels zonder overeenkomst aan de bestelkant te tellen. Door de rijen te inspecteren kun je ontbrekende vermeldingen in de opzoektabel of inconsistente tekst ontdekken.

Bepaal namen en sleutelformaten

Als sleutels verschillende namen hebben, gebruik je left_on="customer_id", right_on="id". Beide sleutelkolommen blijven beschikbaar. Je kunt meerdere sleutels samen vergelijken met on=["city", "year"]; beide moeten overeenkomen.

Overlappende namen van kolommen die geen sleutel zijn krijgen _x en _y. Kies betekenisvolle achtervoegsels zoals suffixes=("_order", "_ship") om de herkomst duidelijk te houden.

Sleutels hebben compatibele datatypes en gelijke waarden nodig. De numerieke waarde 1 kan overeenkomen met de numerieke waarde 1,0, maar een gehele sleutelkolom en een tekstsleutelkolom kunnen bij het samenvoegen een fout geven. Converteer hun formaten bewust. “ana” en “Ana ” verschillen als tekst; standaardiseer het hoofdlettergebruik en de spaties aan de buitenkant vóór het samenvoegen als ze dezelfde persoon aanduiden.

Ook ontbrekende sleutels moet je inspecteren: pandas koppelt ontbrekende sleutels aan de ene kant aan ontbrekende sleutels aan de andere kant. Als beide kanten meerdere van zulke rijen bevatten, kunnen ook die overeenkomsten zich vermenigvuldigen.

Belangrijkste punten

  • Benoem samenvoegsleutels expliciet.
  • Kies het type join op basis van de bronrijen die behouden moeten blijven.
  • Herhaalde sleutels leveren elk overeenkomend paar op.
  • Gebruik validate om de bedoelde sleutelrelatie te controleren.
  • Gebruik een outer join met een herkomstindicator om rijen zonder overeenkomst te inspecteren.
  • Controleer sleutelwaarden, formaten en achtervoegsels voordat je het resultaat gebruikt.

4.2 Combineer waarden met overeenkomende indexlabels

Een index kan de sleutel bevatten waarop je wilt koppelen. pandas gebruikt die labels bij het koppelen van tabellen, het aanvullen van ontbrekende waarden of het optellen van twee Series. De rijpositie alleen bepaalt de overeenkomsten niet.

Koppel op indexlabels

left.join(right) koppelt de twee indexen en gebruikt standaard een left join. Daarentegen gebruikt merge standaard een inner join. Je kunt ook left.merge(right, left_index=True, right_index=True) schrijven als beide sleutels in de index staan.

Stel dat stations de indexlabels A, B, C en de hoogtes 120, 850, 15 m heeft. Een metingentabel heeft de stationindexlabels A, B, B, D. readings.join(stations) behoudt vier rijen en voegt de hoogtes 120, 850, 850 en NaN toe. Beide B-metingen krijgen de hoogte van B. Met how="inner" blijven alleen de drie metingen van A en B behouden.

Als de metingen station-ID's in een gewone kolom bewaren, gebruik je readings.join(stations, on="station"). De linkerkolom wordt gekoppeld aan de rechterindex. De overeenkomstige vorm met merge is readings.merge(stations, left_on="station", right_index=True, how="left").

Maak de plaats van de sleutel duidelijk

set_index("station") verplaatst de stationskolom naar de index. reset_index() zet die terug als gewone kolom. Zo kun je een indeling kiezen waarin de koppeling eenvoudig te inspecteren is. left.join([t1, t2]) kan meerdere tabellen met gemeenschappelijke indexlabels tegelijk koppelen.

Als beide gekoppelde tabellen een kolom bevatten die geen sleutel is, zoals source, geeft join een ValueError tenzij je de namen onderscheidt. Schrijf in pandas 3.1 suffixes=("_left", "_right"); dit vervangt de oudere argumenten lsuffix en rsuffix. De achtervoegsels behouden beide versies zonder te bepalen welke waarde leidend is.

Vul ontbrekende waarden aan vanuit een reservebron

a.combine_first(b) behoudt bekende waarden in a, vult de ontbrekende waarden aan vanuit b bij overeenkomende labels en neemt labels op die alleen in b voorkomen.

Labelaba.combine_first(b)
a1101
bNaN2020
c3303
dafwezig4040

Het resultaat behoudt 1 en 3 omdat de eerste bron die al kent. Het gebruikt 20 om de ontbrekende waarde aan te vullen en voegt label d met 40 toe. Als je de aanroep omdraait, verandert welke bron voorrang heeft. Dit is nuttig als een hoofdbron voorrang moet krijgen op een reservebron, ook wanneer hun rijvolgorde verschilt.

Herken uitlijning bij berekeningen

Laat x de waarden a = 5 en b = 7 hebben en y de waarden b = 1 en c = 2. x + y geeft b = 8, met ontbrekende resultaten bij a en c omdat bij elk één operand ontbreekt. De eerste waarde van x wordt niet bij de eerste waarde van y opgeteld.

x.add(y, fill_value=0) vult de ontbrekende kant aan met nul en levert a = 5, b = 8, c = 2 op. Gebruik die regel als een afwezige bijdrage als nul moet tellen. Uitlijning op labels is het gemeenschappelijke principe achter deze bewerkingen, maar hun regels voor waarden verschillen: join voegt kolommen toe, combine_first vult ontbrekende waarden aan en rekenen gebeurt met overeenkomende waarden.

Belangrijkste punten

  • join koppelt standaard indexen met een left join; merge gebruikt standaard inner.
  • Bij join(on="station") wordt de linkerkolom gekoppeld aan de rechterindex.
  • Gebruik achtervoegsels om overlappende kolommen die geen sleutel zijn te onderscheiden.
  • combine_first geeft voorrang aan bekende waarden in het object waarop de methode wordt aangeroepen.
  • Berekeningen worden uitgelijnd op label; fill_value bepaalt hoe ontbrekende bijdragen worden verwerkt.

4.3 Stapel passende tabellen met concat

Maandbestanden bevatten meestal meer rijen met hetzelfde soort waarneming. Concatenatie verzamelt die delen in één tabel. Daarbij worden labels op de andere as uitgelijnd; er wordt niet gezocht naar overeenkomende klant- of bestelsleutels.

Stapel rijen en lijn kolommen uit

pd.concat([jan, feb]) stapelt rijen omdat axis=0 de standaardinstelling is. Stel dat januari drie ritten heeft met de kolommen trip en km, terwijl februari twee ritten heeft met trip, km en note. Het resultaat heeft vijf rijen en drie kolommen. De ontbrekende cellen van januari in note worden NaN.

join="outer" is de standaardinstelling: die behoudt de vereniging van kolomnamen. join="inner" behoudt alleen gemeenschappelijke namen, zodat het resultaat vijf rijen en de twee kolommen trip en km heeft. Het bevat nog steeds alle vijf waarnemingen; de joininstelling bepaalt wat er op de andere as gebeurt.

De kolomvolgorde in de delen bepaalt de koppeling niet. De exacte namen doen dat wel. Als het ene deel km gebruikt en het andere Km, bevat het resultaat twee gedeeltelijk lege kolommen. Hernoem de kolomkoppen vóór de concatenatie.

Bepaal wat de rijlabels moeten betekenen

De oorspronkelijke indexen blijven standaard behouden. Met beginindexen 0, 1, 2 en 0, 1 herhaalt het resultaat de labels 0 en 1. result.loc[0] selecteert twee rijen. Gebruik ignore_index=True als die getallen geen betekenis hebben en je nieuwe labels van 0 tot en met 4 wilt.

Als de herkomst van belang is, gebruik je een buitenste indexniveau:

result = pd.concat(
    [jan, feb], keys=["jan", "feb"], names=["month", "row"]
)

Nu selecteert result.loc["feb"] de twee rijen van februari. keys bewaart de herkomst binnen een MultiIndex. In pandas 3 geeft de combinatie van keys met ignore_index=True een ValueError; kies voor die bewerking herkomstlabels of een nieuwe gewone index.

Plaats kolommen naast elkaar

pd.concat([x, y], axis=1) lijnt rijen uit op indexlabel. Voor x met a = 1, b = 2 en y met b = 3, c = 4 heeft het resultaat de rijen a, b, c. De kolom x ontbreekt bij c en y bij a. Met join="inner" blijft alleen b over.

BewerkingToegevoegd langsLabels uitgelijnd op
concat(..., axis=0)RijenKolomnamen
concat(..., axis=1)KolommenRijindexen
merge(..., on="id")Overeenkomende rijparenWaarden in sleutelkolommen
Controleer opslag en verzamel delen efficiënt

Een kolom die numerieke waarden en tekst mengt, kan het datatype object krijgen. Als gewone NumPy-gegevens van het type int64 een ontbrekende waarde krijgen, worden ze float64; pandas-"Int64" kan gehele getallen met <NA> behouden. Stem datatypes vóór het combineren op elkaar af als de kolom een vastgelegd type heeft.

DataFrame.append is in pandas 2.0 verwijderd. Verzamel voor veel bestanden DataFrames in een lijst en roep pd.concat na de lus één keer aan. Als je in elke iteratie een groeiend resultaat opnieuw opbouwt, kopieer je de verzamelde gegevens steeds opnieuw en wordt het traag.

Controleer of de lengte van een rijconcatenatie gelijk is aan de som van de invoerlengtes. Inspecteer daarna kolomnamen, aantallen ontbrekende waarden en datatypes.

Belangrijkste punten

  • Rijconcatenatie lijnt kolomnamen uit en telt de aantallen invoerrijen op.
  • join kiest gemeenschappelijke of alle labels op de andere as.
  • Gebruik ignore_index voor labels die je niet hoeft te bewaren of keys voor de herkomst.
  • Kolomconcatenatie lijnt rijindexen uit.
  • Verzamel eerst veel delen en concateneer ze één keer.
5

Herstructureer gegevens met hiërarchische indexen, pivot en melt

Dezelfde metingen kun je ordenen als rijen, kolommen of niveaus van een index. Gebruik een MultiIndex om waarnemingen met meerdere sleutels aan te duiden en verplaats die sleutels daarna met stack en unstack of met pivot en melt. Houd bij welke labels een cel identificeren en of ze uniek zijn. Zo wordt herstructureren voorspelbaar en kun je een ontbrekende combinatie onderscheiden van een gemeten nul of een paar records dat expliciet moet worden geaggregeerd.

5.1 Selecteer rijen met meer dan één indexniveau

Een MultiIndex geeft elke rij meerdere labels. Een verkooprij kan worden geïdentificeerd door zowel stad als jaar, geschreven als een tuple zoals ("Osaka", 2024). Elk label heeft een niveau en de volgorde van die niveaus is van belang bij het selecteren.

Maak en benoem de index

df.set_index(["city", "year"]) verplaatst die kolommen naar de index. pd.MultiIndex.from_product([["Lima", "Osaka"], [2024, 2025]], names=["city", "year"]) maakt elke combinatie van de opgegeven labels. Concatenatie met keys voegt ook een niveau toe.

Voor de voorbeelden heeft sales deze indexparen en waarden:

cityyearsales
Osaka2024120
Osaka2025135
Lima202480
Lima202595

Na het instellen van de twee indexniveaus is df.index.names gelijk aan ["city", "year"]. rename_axis(["town", "yr"]) wijzigt de namen van de niveaus zonder hun waarden te wijzigen.

Selecteer een buitenste label of een volledige tuple

df.loc["Osaka"] selecteert beide rijen van Osaka. Het geselecteerde stadsniveau valt weg, zodat 2024 en 2025 als index overblijven. df.loc[("Lima", 2025), "sales"] selecteert één cel en geeft 95 terug.

Eén label dat je aan loc doorgeeft, zoekt op het buitenste niveau. df.loc[2024] zoekt daarom naar een stad met de naam 2024 en geeft in deze tabel een KeyError. Gebruik df.xs(2024, level="year") om een jaar over alle steden heen te selecteren. Dit geeft 120 voor Osaka en 80 voor Lima terug, met stad als overblijvende index.

Voor een algemenere selectie behoudt df.loc[pd.IndexSlice[:, 2025], :] alle steden voor het jaar 2025. De dubbele punt op de eerste positie betekent alle labels op dat niveau; de laatste dubbele punt selecteert alle kolommen.

Sorteer voordat je een deelbereik selecteert

Voor selectie op een exact label hoeft niet de hele index gesorteerd te zijn, maar voor een deelbereik van labels is passende sortering nodig. Gebruik df.sort_index() vóór df.loc["Lima":"Osaka"]. Een ongesorteerde MultiIndex kan bij zo'n deelbereik een UnsortedIndexError geven.

sort_index() sorteert alle niveaus in hun huidige volgorde, dus eerst de steden en binnen elke stad de jaren. sort_index(level="year") sorteert op het genoemde niveau. swaplevel("city", "year") plaatst jaar op de buitenste positie; gebruik daarna sort_index() om de nieuwe indeling te groeperen en te sorteren. Alleen de posities van de niveaus verwisselen sorteert de rijen niet.

Verplaats labels terug naar kolommen

reset_index() zet beide niveaus terug als kolommen. reset_index(level="year") zet alleen jaar terug en laat stad als index staan. Met deze bewerkingen kun je een tabel voorbereiden om samen te voegen of op te slaan zonder de identificerende waarden te verliezen.

Ook kolommen kunnen meerdere niveaus hebben. Een herstructurering met verkoop- en personeelswaarden kan kolomlabels zoals ("sales", 2024) en ("staff", 2025) opleveren. df["sales"] selecteert alle kolommen onder het bovenste label sales.

Voor een totaal per stad geeft df.groupby(level="city")["sales"].sum() Lima 175 en Osaka 255. Gebruik groepering voor deze samenvatting; het oude argument sum(level="city") is in pandas 2.0 verwijderd.

Belangrijkste punten

  • Een tuple identificeert een volledig MultiIndex-label over de niveaus heen.
  • Selectie met één label via loc begint op het buitenste niveau.
  • Gebruik xs of IndexSlice om op een binnenste niveau te selecteren.
  • Sorteer de index voordat je een deelbereik van labels selecteert.
  • Verwissel niveaus om hun rol te wijzigen en stel ze opnieuw in om kolommen terug te krijgen.
  • Gebruik groupby(level=...) voor samenvattingen per indexniveau.

5.2 Verplaats labels tussen de index en kolommen

stack en unstack veranderen waar labels staan. Waarden behouden hun identificerende combinatie, maar de tabel kan combinaties zichtbaar maken waarvoor geen waarneming bestaat.

Verplaats kolomlabels naar de index met stack

Stel dat een breed DataFrame de steden Osaka en Lima als index en de jaren 2024 en 2025 als kolommen heeft. Osaka heeft de waarden 120 en 135; Lima heeft 80 en 95. Noem de assen city en year om hun betekenis zichtbaar te houden.

long = wide.stack() verplaatst de jaarlabels naar een nieuw binnenste indexniveau. Met deze kolommen met één niveau is het resultaat een Series met vier waarden:

  • ("Osaka", 2024) geeft 120.
  • ("Osaka", 2025) geeft 135.
  • ("Lima", 2024) geeft 80.
  • ("Lima", 2025) geeft 95.

De stadslabels worden herhaald omdat elke stad nu één rij per jaar heeft. Bij het stapelen zijn de waarden niet opgeteld en zijn geen extra metingen gemaakt.

Verplaats een indexniveau naar kolommen met unstack

long.unstack() verplaatst het binnenste indexniveau, jaar, naar kolommen en herstelt de brede indeling. long.unstack("city") verplaatst in plaats daarvan stad, met jaren als rijen en steden als kolommen. Een numerieke niveaupositie zoals unstack(0) kan hetzelfde niveau selecteren, maar een naam maakt de bedoeling makkelijker leesbaar.

BewerkingVerplaatsing van labels
stack()Een kolomniveau wordt een binnenste indexniveau
unstack()Een indexniveau wordt een kolomniveau

Als de invoer hiërarchische kolommen heeft, kan na het stapelen van één niveau een ander niveau als kolommen overblijven. Voor kolommen zoals ("sales", 2024) en ("staff", 2024) geeft stack("year") een DataFrame met verkoop- en personeelskolommen terug. Het stapelen van alle kolomniveaus geeft een Series terug.

Houd ontbrekende combinaties zichtbaar

Stel nu dat de lange Series geen waarde voor Lima in 2025 heeft. Bij unstack ontstaat een rechthoekige tabel van stad bij jaar, waardoor op die plaats NaN wordt ingevoegd. Gewone gehele waarden worden floats als deze ontbrekende cel een float-markering voor ontbrekende waarden vereist.

unstack(fill_value=0) kan een nieuw ontbrekende combinatie met nul vullen. Gebruik dit alleen als afwezigheid nul betekent, zoals geen geregistreerde verkopen in een volledige dataset met verkoopgebeurtenissen. Een ontbrekende sensorwaarneming is onbekend en moet ontbreken blijven.

stack() in pandas 3 behoudt ontbrekende cellen. Het stapelen van de onvolledige tabel van 2 × 2 geeft daarom vier waarden terug, inclusief NaN. Voeg .dropna() toe als je alleen de drie bekende waarden wilt. Door ontbrekende waarden te verwijderen verandert welke combinaties vertegenwoordigd blijven, dus controleer de lengte van het resultaat.

Los dubbele combinaties eerst op

Unstack heeft één waarde per volledige indexcombinatie nodig. Twee waarden met het label ("Lima", 2025) moeten in dezelfde uitvoercel komen en geven de fout ValueError: Index contains duplicate entries, cannot reshape.

Gebruik long.index.duplicated() om herhaalde volledige labels te inspecteren, of controleer de bijbehorende sleutelkolommen voordat je de index instelt. Bepaal of de rijen onbedoelde kopieën zijn of afzonderlijke waarnemingen die moeten worden gecombineerd. Ze verwijderen of aggregeren is een beslissing over de gegevens; unstack kiest geen regel voor je.

Belangrijkste punten

  • stack verplaatst kolomlabels naar binnen; unstack verplaatst indexlabels naar buiten.
  • Kies het niveau expliciet als de standaardinstelling niet het benodigde niveau is.
  • Afwezige combinaties verschijnen bij omzetting naar breed formaat als ontbrekende cellen.
  • Bij stack in pandas 3 blijven ontbrekende waarden behouden, tenzij je ze achteraf verwijdert.
  • Elke volledige indexcombinatie moet uniek zijn voor unstack.

5.3 Zet tabellen om tussen lang en breed formaat

In lang formaat staan identificerende kolommen naast één waardekolom. In breed formaat zijn metingen verdeeld over kolommen, zoals één kolom per jaar. Kies de indeling die de volgende taak eenvoudig maakt: lange tabellen zijn geschikt voor filteren en groeperen, terwijl brede tabellen vergelijking naast elkaar ondersteunen.

Zet unieke combinaties met pivot om in cellen

Een lange tabel met de kolommen city, year en sales wordt breed met df.pivot(index="city", columns="year", values="sales"). Stadslabels vormen rijen, jaren vormen kolommen en verkopen vullen de cellen. Dit is gelijk aan df.set_index(["city", "year"])["sales"].unstack().

De verkopen van Osaka in 2024 en 2025, 120 en 135, worden twee cellen in één rij. De waarden 80 en 95 van Lima vormen de tweede rij. Als je de argumenten index en columns verwisselt, transponeer je deze indeling. Als je values weglaat, worden alle overige gegevenskolommen omgezet en kunnen hiërarchische kolommen ontstaan, zoals een verkoopniveau en een personeelsniveau boven de jaren.

Bepaal of herhalingen fouten of waarnemingen zijn

pivot herschikt waarden en kan ze niet combineren. Twee rijen voor Lima in 2025 zouden twee waarden in één uitvoercel vereisen en geven daarom een ValueError. Tel herhaalde combinaties met df.duplicated(subset=["city", "year"]).sum().

Als afzonderlijke waarnemingen moeten worden gecombineerd, gebruik je pivot_table met een gekozen aggregatie. Voor de waarden 95 en 105 bij Lima in 2025 geeft het standaardgemiddelde 100,0. Met aggfunc="sum" is de cel 200. Als elke combinatie één keer had moeten voorkomen, blijf dan pivot gebruiken zodat een gegevensfout zichtbaar wordt in plaats van ongemerkt te worden samengevat.

Zet met melt meetkolommen om in rijen

Stel dat een CSV de kolommen city, 2023, 2024 en 2025 geeft. De waarden van Osaka zijn 110, 120, 135; die van Lima zijn 70, 80, 95. Zet de jaarkolommen om:

long = wide.melt(
    id_vars="city", var_name="year", value_name="sales"
)

id_vars blijft staan en wordt herhaald. Elk label van een meetkolom wordt een jaarwaarde; elke cel wordt een verkoopwaarde. Twee rijen en drie meetkolommen leveren zes lange rijen op, waaronder een rij zoals Osaka, “2023”, 110. Ook ontbrekende meetcellen worden rijen, tenzij je die achteraf verwijdert.

Omdat deze kolomlabels uit CSV-tekst kwamen, zijn de resulterende jaren tekst. Gebruik long["year"] = long["year"].astype(int) voordat je ermee rekent. Gehele kolomlabels in de invoer zouden al gehele jaarwaarden opleveren.

Bepaal wat melt omzet en herstel de vorm

value_vars=["2024", "2025"] beperkt de omzetting tot die kolommen. Als je id_vars vergeet, kunnen stadsnamen in dezelfde waardekolom als de metingen terechtkomen. Maak altijd onderscheid tussen identificatiekolommen en kolommen die waarden bevatten.

Zonder expliciete namen heet de waardekolom value. De variabelekolom neemt wide.columns.name over of heet variable als die naam leeg is. Expliciete var_name en value_name maken het resultaat makkelijker te gebruiken.

Zet de zes rijen met index="city", columns="year", values="sales" terug om de drie jaarkolommen te herstellen. Na pivot is stad de index en heet de kolomas jaar. reset_index() herstelt stad als kolom en rename_axis(columns=None) verwijdert de naam van de kolomas. Controleer zowel de vorm als de labels voordat je de tabel samenvoegt of opslaat.

Belangrijkste punten

  • Lang formaat plaatst meetlabels in rijen; breed formaat plaatst ze in kolommen.
  • pivot vereist unieke rij-kolomcombinaties en voert geen aggregatie uit.
  • pivot_table combineert herhaalde combinaties met de gekozen aggregatie.
  • melt herhaalt identificatiewaarden en maakt één rij per meetcel.
  • Controleer de types van kolomlabels als die waarden worden.
  • Stel indexen en asnamen opnieuw in als een platte uitvoertabel nodig is.

Gegevens bewerken met pandas: voorbeelden

5 Walkthroughs

1

Schoon metingen op zonder hun betekenis te verliezen

16 stappen
Bepaal hoeveel waarden ontbreken, kies een passende aanvulling of verwijdering en verwerk herhaalde records met een kleine weertabel.
  1. 1
    IntroductieBepaal wat elke ontbrekende waarde betekent

    Een weertabel heeft vier steden en twee meetkolommen: temperatuur in °C en neerslag in mm. Sommige metingen ontbreken. Je gaat die ontbrekende waarden opsporen, bepalen welke rijen bruikbaar zijn en een herhaald record onderscheiden van een werkelijk andere waarneming. Het bruikbare resultaat is een tabel waarvan de overgebleven waarden nog steeds betekenen wat je denkt dat ze betekenen. Gebruik import pandas as pd en import numpy as np voor de code.

  2. 2
    UitlegHerken de markering voor een ontbrekende waarde

    Een ontbrekende waarde kan verschijnen als NaN, NaT of pd.NA, afhankelijk van het datatype. Ook None wordt als ontbrekend herkend.

    Gebruik df.isna() om een booleaanse tabel te maken met True op elke plaats waar een waarde ontbreekt. Een vergelijking met np.nan mist die waarden omdat NaN zelfs niet gelijk is aan zichzelf. Met de detectiemethode werkt dezelfde controle voor numerieke, tekst- en datetime-kolommen.

  3. 3
    VoorbeeldTel de ontbrekende weergegevens

    Lima heeft temperatuur 18 en neerslag 0. Bij Oslo ontbreekt de temperatuur maar is de neerslag 4. Pune heeft temperatuur 31 en daar ontbreekt de neerslag. Bij Kyiv ontbreken beide metingen. Elke stadsnaam is bekend.

    df.isna().sum() geeft stad 0, temperatuur 2 en neerslag 2. df.isna().mean() geeft aandelen ontbrekende waarden van 0, 0,5 en 0,5 omdat elke kolom vier waarden heeft.

  4. 4
    KernpuntOnderscheid cellen van rijen

    Kyiv heeft twee ontbrekende cellen, terwijl Oslo en Pune er elk één hebben. Er zijn vier ontbrekende cellen maar slechts drie getroffen rijen.

    df.isna().sum().sum() telt de cellen. df.isna().any(axis=1).sum() markeert eerst of elke rij een ontbrekende waarde heeft en telt daarna die rijen. De rijgewijze any voorkomt dat Kyiv twee keer wordt geteld.

  5. 5
    UitdagingZoek een verborgen code voor ontbrekende waarden

    Een sensorkolom bevat 0, 7, -999 en NaN. In de documentatie staat dat -999 betekent dat de sensor uitstond. Hoeveel waarden moeten na het opschonen bekend blijven?

    ---reveal---

    Twee: 0 en 7. Vervang de gedocumenteerde code -999 door een markering voor ontbrekende waarden en gebruik daarna opnieuw isna(). Nul is hier een echte meting. Als je elke nul als ontbrekend behandelt, verwijder je naast de niet-beschikbare metingen ook een bekende waarde.

  6. 6
    VoorbeeldBehoud rijen met een temperatuur

    Stel dat de analyse temperatuur nodig heeft maar onbekende neerslag kan verdragen. Gebruik clean = df.dropna(subset=["temp_c"]). Dit behoudt Lima en Pune.

    De standaardaanroep dropna() zou alleen Lima behouden omdat die elke kolom controleert. thresh=2 zou ook Oslo behouden, waarvan de stad en neerslag bekend zijn. Kies de regel die uitdrukt welke kolommen de analyse werkelijk nodig heeft.

  7. 7
    VoorbeeldMarkeer schattingen vóór het aanvullen

    Begin voor een neerslaganalyse die alle steden behoudt met de oorspronkelijke vier rijen. Bewaar vóór het aanvullen van temperaturen df["temp_missing"] = df["temp_c"].isna().

    De bekende temperaturen 18 en 31 hebben een gemiddelde van 24,5. Ken df["temp_c"] = df["temp_c"].fillna(df["temp_c"].mean()) toe om de twee ontbrekende waarden aan te vullen. De bewaarde indicator laat nog steeds zien dat de metingen voor Oslo en Kyiv zijn geschat.

  8. 8
    TipKies de schatting op basis van de betekenis

    Aanvullen met het gemiddelde gebruikt de bekende metingen als eenvoudige schatting, maar verkleint de zichtbare variatie. De mediaan is minder gevoelig voor extreme metingen. Aanvullen met nul stelt iets anders: de ontbrekende hoeveelheid was nul.

    Een uitgeschakelde regensensor bewijst niet dat de neerslag nul was. Gebruik aanvullingen per kolom die passen bij de datatypes, zoals een dictionary met numerieke waarden voor numerieke velden en tekst voor tekstvelden.

  9. 9
    VerbandGebruik volgorde alleen als die informatie bevat

    Voorwaarts opvullen neemt de vorige bekende waarde over op een plaats waar een waarde ontbreekt; achterwaarts opvullen gebruikt de volgende. Bij 12, NaN, NaN, 15 geeft ffill(limit=1) 12, 12, NaN, 15.

    Interpolatie schat daarentegen tussen bekende posities: 10, NaN, NaN, 16 wordt 10, 12, 14, 16. Deze methoden passen bij metingen met een betekenisvolle volgorde, niet bij een lijst van steden zonder onderling verband.

  10. 10
    UitdagingBehoud bruikbare rijen zonder te stellen dat er geen regen viel

    Drie records bevatten A/19/2, B/21/NaN en C/NaN/5 voor stad/temperatuur/neerslag. Je hebt temperatuurvergelijkingen nodig en kunt ontbrekende neerslag niet schatten. Welke rijen en waarden moet je behouden?

    ---reveal---

    Behoud A en B door de temperatuurkolom te controleren met dropna(subset=["temp_c"]). Laat de neerslag van B ontbreken. Als je op alle kolommen verwijdert, verlies je de bruikbare temperatuur van B; als je de neerslag met nul aanvult, voeg je een niet-onderbouwde meting toe.

  11. 11
    VoorbeeldVergelijk volledige records

    Een besteltabel heeft ID's 101, 102, 102, 103, 104, 104. De twee rijen voor 102 zijn identiek. De twee rijen voor 104 verschillen in geregistreerd gewicht: 0,5 kg en 0,8 kg.

    df.duplicated().sum() meldt één extra kopie van een volledige rij. drop_duplicates() laat vijf rijen over omdat de verschillende records voor 104 geen exacte kopieën zijn. Indexlabels beïnvloeden deze vergelijking niet.

  12. 12
    UitlegKies een sleutel en een versie om te behouden

    Als je alleen order_id vergelijkt, worden de tweede 102 en de tweede 104 als herhalingen gemarkeerd, wat twee extra kopieën van sleutels geeft. De vraag is nu welke versie elke bestelling vertegenwoordigt.

    keep="last" kiest de laatste in de huidige rijvolgorde. Om dat de nieuwste te laten betekenen, sorteer je eerst op een bijwerkveld. keep=False verwijdert alle leden van herhaalde groepen en zou dus beide records voor 104 verwijderen.

  13. 13
    UitdagingBehoud het nieuwste record

    Artikel H heeft bijwerkingen 1, 4, 2 en gewichten 3, 6, 5 kg in die invoervolgorde. Hoe behoud je het nieuwste record en welk gewicht blijft over?

    ---reveal---

    Sorteer updated oplopend en gebruik daarna drop_duplicates(subset="item", keep="last"). De laatste bijwerking is 4, dus 6 kg blijft over. Als je zonder sorteren de laatste invoerrij behoudt, selecteer je bijwerking 2 en behoud je ten onrechte 5 kg.

  14. 14
    TipStandaardiseer voordat je identiteit controleert

    De tekstsleutels “ Lisbon”, “lisbon” en “LISBON ” komen niet exact overeen. Verwijder witruimte aan de buitenkant en maak ze klein als die schrijfwijzen dezelfde stad aanduiden. Inspecteer daarna herhaalde sleutels.

    Het doel van de tabel bepaalt of herhaling geldig is: veel bestellingen kunnen een klant delen, maar een opzoektabel die één gegevensrij per klant moet geven heeft unieke sleutels nodig. Geldige bestellingen verwijderen kan een herhaalde opzoeksleutel niet herstellen.

  15. 15
    UitdagingVerbind tekstopschoning met de keuze van records

    Klantrecords hebben de sleutels “ emi ” en “EMI”, bijwerkingen 2 en 5 en saldi 10 en 14. In een derde record zonder verband ontbreekt het oudere saldo. Je hebt het nieuwste record per klant nodig. Wat moet er gebeuren voordat je saldi aanvult?

    ---reveal---

    Standaardiseer de sleutels, sorteer op bijwerking en behoud de laatste rij per opgeschoonde sleutel. De twee schrijfwijzen van Emi worden één klant met saldo 14. Bepaal eerst de identiteit van records zodat verouderde versies geen invloed hebben op een latere statistiek voor het aanvullen.

  16. 16
    SamenvattingControleer het resultaat aan de hand van de keuze

    Vergelijk na het opschonen het aantal rijen, de aantallen ontbrekende waarden en de uniciteit van sleutels met het beoogde resultaat. Een indicator voor ontbrekende waarden houdt schattingen zichtbaar; een gesorteerde controle op duplicaten op basis van sleutels houdt de gekozen recordversie zichtbaar.

    Sla teruggegeven objecten op via directe toekenning. Onder het kopiëren bij schrijven van pandas 3 wijzigt een geketende inplace-aanroep op een geselecteerde kolom het bovenliggende DataFrame niet.

2

Transformeer codes en metingen

15 stappen
Kies exacte vervangingen, waardetoewijzingen, conversie, klassen, geschaalde waarden en indicatoren op basis van de uitvoer die je nodig hebt.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieKies de betekenis van de uitvoer
  2. 2
    VoorbeeldVertaal of wijzig een waarde
  3. 3
    VoorbeeldConverteer de tekst nadat je de opmaak hebt opgeschoond
  4. 4
    KernpuntHoud kolomkoppen en cellen gescheiden
  5. 5
    UitdagingZoek de oorzaak van een nieuwe ontbrekende waarde
  6. 6
    VoorbeeldLees de grenzen van een interval
  7. 7
    UitlegNeem de laagste grens bewust op
  8. 8
    VerbandKies breedtes of aantallen
  9. 9
    UitdagingTest de grensregel
  10. 10
    VoorbeeldTrek het minimum af voordat je deelt
  11. 11
    VoorbeeldMeet de afstand tot het gemiddelde
  12. 12
    TipBegrens zonder een waarneming te verwijderen
  13. 13
    UitlegGeef aan tot welke categorie een waarde behoort
  14. 14
    UitdagingVerklaar een indicatorrij met alleen onwaar
  15. 15
    SamenvattingControleer de gemaakte weergave
3

Zet inconsistente tekst om in bruikbare labels

17 stappen
Schoon namen op, haal hoeveelheden uit beschrijvingen en behoud de betekenis van categorielabels en hun volgorde.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieGeef tekst een consistente structuur
  2. 2
    UitlegPas een methode toe op elke tekenreeks
  3. 3
    VoorbeeldSplits alleen waar het formaat dat vereist
  4. 4
    TipZoek gewone tekst letterlijk
  5. 5
    UitdagingBereid een tekstsleutel voor een samenvoeging voor
  6. 6
    UitlegMaak een patroon voor een hoeveelheid
  7. 7
    VoorbeeldHaal de eerste hoeveelheid op
  8. 8
    VerbandKies alle overeenkomsten als één niet genoeg is
  9. 9
    UitdagingWijs een gedeeltelijke overeenkomst van een code af
  10. 10
    TipBeperk hoeveel een patroon omvat
  11. 11
    VoorbeeldOnderscheid de labellijst van de codes
  12. 12
    UitlegGeef maten de bedoelde volgorde
  13. 13
    TipMaak ruimte voordat je een nieuw label toekent
  14. 14
    UitdagingHoud lege categorieën zichtbaar
  15. 15
    VerbandCombineer categorieën uit verschillende gegevensblokken
  16. 16
    UitdagingSchoon op voordat je de toegestane lijst definieert
  17. 17
    SamenvattingInspecteer zowel tekstwaarden als opslag
4

Combineer tabellen en verklaar elke rij

18 stappen
Voorspel sleutelovereenkomsten, inspecteer records zonder overeenkomst, vul waarden op basis van labels aan en kies wanneer je waarnemingen concateneert.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieKies hoe de tabellen samenhangen
  2. 2
    VoorbeeldBenoem de gemeenschappelijke sleutel expliciet
  3. 3
    UitlegBehoud de kant die je nodig hebt
  4. 4
    KernpuntVerwacht elk overeenkomend paar
  5. 5
    TipMaak van de relatie een gecontroleerde regel
  6. 6
    VoorbeeldTel sleutels zonder overeenkomst afzonderlijk
  7. 7
    UitdagingZoek de oorzaak van extra rijen
  8. 8
    VoorbeeldKoppel een linkerkolom aan een rechterindex
  9. 9
    TipOnderscheid overlappende kolommen
  10. 10
    VoorbeeldGeef de hoofdbron voorrang
  11. 11
    VerbandVolg labels bij het optellen van waarden
  12. 12
    UitdagingVul de juiste waarneming aan
  13. 13
    VoorbeeldVoeg waarnemingen toe door kolomnamen uit te lijnen
  14. 14
    UitlegBehoud een herkomstlabel of maak een nieuwe index
  15. 15
    KernpuntLijn rijen uit bij het toevoegen van kolommen
  16. 16
    UitdagingOnderzoek nieuwe ontbrekende afstanden
  17. 17
    UitdagingCombineer gegevensblokken voordat je opzoekgegevens toevoegt
  18. 18
    SamenvattingVerklaar toevoegingen en overeenkomsten
5

Herstructureer waarden met behoud van hun labels

18 stappen
Maak een MultiIndex, verplaats niveaus met stack en unstack en kies pivot of melt voor lange en brede indelingen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieHoud de identiteit van elke meting bij
  2. 2
    VoorbeeldGeef een rij twee labels
  3. 3
    UitlegSelecteer het niveau dat je werkelijk bedoelt
  4. 4
    TipSorteer nadat je de rollen van niveaus hebt gewijzigd
  5. 5
    UitdagingSelecteer een binnenste niveau zonder de gegevens te wijzigen
  6. 6
    VoorbeeldVerplaats jaarkolommen naar de index
  7. 7
    UitlegKies het niveau dat kolommen wordt
  8. 8
    KernpuntHerken een nieuw zichtbare ontbrekende waarde
  9. 9
    UitdagingZoek waarom omzetting naar breed formaat mislukt
  10. 10
    VerbandKies lang of breed voor de volgende taak
  11. 11
    VoorbeeldZet een unieke combinatie met pivot om in een cel
  12. 12
    UitlegAggregeer alleen als dat de bedoeling is
  13. 13
    VoorbeeldZet metingen met melt om en behoud identificatiegegevens
  14. 14
    TipControleer welk type een kolomlabel wordt
  15. 15
    UitdagingReconstrueer een ontbrekende cel in breed formaat
  16. 16
    VerbandHerstel een tabel voor kolombewerkingen
  17. 17
    UitdagingKies de oplossing voor herhaalde metingen
  18. 18
    SamenvattingControleer vorm, uniciteit en betekenis

Gegevens bewerken met pandas: oefenvragen

50 Oefenvragen in 5 sets

Set 1: Lees de gegevens en voorspel eenvoudige veranderingen10 Oefenvragen

Vraag 1 van 10

Een float-Series bevat 6, NaN en 12. Wat is het standaard berekende gemiddelde?
  1. 6,0
  2. 18,0
  3. 12,0
  4. 9,0
Toon antwoordVerberg antwoord
Antwoord: D
Het gemiddelde gebruikt de twee bekende waarden, dus het telt 6 en 12 op en deelt door 2. Dat geeft 9,0. Als je door alle drie posities deelt, krijg je 6,0 en behandel je de ontbrekende waarde als nul, hoewel geen nul is waargenomen. len telt posities; het standaardgemiddelde slaat ontbrekende waarden over.

Vraag 2 van 10

Een DataFrame heeft ontbrekende cellen op rij A/kolom x, rij A/kolom y en rij C/kolom x. Elke andere cel is bekend. Hoeveel rijen telt df.isna().any(axis=1).sum()?
  1. 3
  2. 4
  3. 1
  4. 2
Toon antwoordVerberg antwoord
Antwoord: D
Rijen A en C bevatten elk minstens één ontbrekende waarde, dus er worden twee rijen geteld. Rij A telt bij deze rijgewijze test slechts één keer mee, hoewel de rij twee ontbrekende cellen heeft. Een totaal van drie zou de ontbrekende cellen tellen in plaats van de getroffen rijen.

Vraag 3 van 10

Een tabel heeft de kolommen item, mass_kg en note. Rij U heeft een bekende massa en een ontbrekende notitie; rij V heeft een ontbrekende massa en een bekende notitie. Beide artikelnamen zijn bekend. Wat behoudt df.dropna(subset=["mass_kg"])?
  1. Geen van beide rijen
  2. Alleen rij V
  3. Alleen rij U
  4. Beide rijen
Toon antwoordVerberg antwoord
Antwoord: C
Alleen rij V heeft een ontbrekende waarde in de gecontroleerde kolom, dus die rij wordt verwijderd en U blijft staan. Een ontbrekende notitie is voor deze subsetregel niet van belang. Als je beide rijen zou verwijderen, zou je de bredere standaardcontrole over alle kolommen toepassen in plaats van de opgegeven controle op alleen massa.

Vraag 4 van 10

Een Series bevat “A”, “B” en “C”. Wat levert s.map({"A": "active", "B": "blocked"}) op?
  1. “active”, “blocked”, “blocked”
  2. “active”, “blocked”, NaN
  3. “active”, “blocked”, “C”
  4. “A”, “B”, NaN
Toon antwoordVerberg antwoord
Antwoord: B
De twee sleutels in de dictionary worden toegewezen aan hun opgegeven uitvoerwaarden en C wordt ontbrekend omdat de opzoektabel geen vermelding voor C heeft. De oorspronkelijke C behouden is het gedrag van replace met deze dictionary. Een dictionary die aan map wordt doorgegeven, definieert uitvoerwaarden voor de hele waardetoewijzing, niet alleen wijzigingen van geselecteerde waarden.

Vraag 5 van 10

De waarden 0, 10 en 20 worden met de standaardinstellingen doorgegeven aan pd.cut(x, [0, 10, 20]). Waar komt 10 terecht?
  1. Die komt in (0, 10].
  2. Die hoort bij beide intervallen.
  3. Die komt in (10, 20].
  4. Die wordt ontbrekend.
Toon antwoordVerberg antwoord
Antwoord: A
De standaardintervallen sluiten hun rechtergrenspunt in en hun linkergrenspunt uit. Tien hoort daarom bij het eerste interval, waarvan de rechtergrens 10 is. Als je de waarde in het tweede interval plaatst, gebruik je links gesloten intervallen; daarvoor is right=False nodig.

Vraag 6 van 10

Een Series met steden bevat “ Accra”, “ACCRA ” en “accra”. Hoeveel unieke waarden en rijen blijven er over na s.str.strip().str.lower()?
  1. 1 unieke waarde, 3 rijen.
  2. 3 unieke waarden, 3 rijen.
  3. 1 unieke waarde, 1 rij.
  4. 2 unieke waarden, 3 rijen.
Toon antwoordVerberg antwoord
Antwoord: A
Door witruimte aan de buitenkant te verwijderen en kleine letters te gebruiken wordt elke waarde “accra”, dus er is één unieke waarde over de drie oorspronkelijke rijen. Tekst opschonen wijzigt waarden zonder records te verwijderen. Voor een resultaat met één rij zou een extra bewerking nodig zijn om duplicaten te verwijderen; die is niet uitgevoerd.

Vraag 7 van 10

Een productcode is “72x”. Hoe classificeren str.contains(r"\d+") en str.fullmatch(r"\d+") die code?
  1. Contains is waar; fullmatch is onwaar.
  2. Beide geven waar terug.
  3. Contains is onwaar; fullmatch is waar.
  4. Beide geven onwaar terug.
Toon antwoordVerberg antwoord
Antwoord: A
De code bevat een reeks cijfers, dus de zoekopdracht die overal kijkt slaagt. De laatste x verhindert dat de hele code aan een patroon met alleen cijfers voldoet, dus fullmatch mislukt. Als je het numerieke voorvoegsel als een volledige overeenkomst behandelt, accepteer je tekst buiten het vereiste formaat.

Vraag 8 van 10

Leveringen hebben de depotsleutels P, P, Q, R. Een depottabel heeft de sleutels P, P, Q, S. Hoeveel rijen levert een outer join op de sleutel op?
  1. 8
  2. 7
  3. 6
  4. 9
Toon antwoordVerberg antwoord
Antwoord: B
De twee P-rijen aan elke kant leveren vier paren op en Q draagt één gekoppelde rij bij. R en S voegen elk één rij zonder overeenkomst toe, in totaal zeven. Bij zes zou je een van de kanten zonder overeenkomst missen of de paren met herhaalde sleutels te laag tellen; een outer join behoudt de sleutels zonder overeenkomst van beide kanten.

Vraag 9 van 10

Gegevensblok A met twee rijen heeft de kolommen id, km. Gegevensblok B met drie rijen heeft de kolommen id, km, flag. Welke vorm levert pd.concat([a, b], ignore_index=True) op?
  1. 6 rijen, 3 kolommen
  2. 3 rijen, 3 kolommen
  3. 5 rijen, 3 kolommen
  4. 5 rijen, 2 kolommen
Toon antwoordVerberg antwoord
Antwoord: C
Rijconcatenatie telt de invoerlengtes op, wat vijf rijen geeft, en behoudt de vereniging van kolomnamen, wat drie kolommen geeft. De twee rijen van A krijgen ontbrekende waarden voor flag. Voor twee kolommen zou join="inner" nodig zijn; de index opnieuw instellen verwijdert geen extra kolom.

Vraag 10 van 10

Een brede tabel heeft 3 stationsrijen en de kolommen station, dry en wet. Hoeveel rijen ontstaan als je de twee meetkolommen met id_vars="station" omzet met melt?
  1. 9 rijen
  2. 6 rijen
  3. 3 rijen
  4. 2 rijen
Toon antwoordVerberg antwoord
Antwoord: B
Elk van de drie stationsrijen draagt één droge en één natte meting bij, wat zes lange rijen oplevert. De stationsidentificatie wordt herhaald, niet omgezet met melt. Negen zou de identificatie ten onrechte als derde meetkolom behandelen; alleen de twee geselecteerde waardekolommen bepalen de vermenigvuldiging van het aantal rijen.
Set 2: Kies methoden voor veelvoorkomende gegevensbewerkingen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

De ID's in rijvolgorde zijn K, L, L, M, M, N. Welke ID's blijven over na drop_duplicates(subset="id", keep=False)?
  1. K, N
  2. L, M
  3. K, L, N
  4. K, L, M, N
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een geordende Series is 5,0; NaN; NaN; 11,0. Wat levert ffill(limit=1) op?
  1. 5, NaN, 11, 11
  2. 5, 8, NaN, 11
  3. 5, 5, NaN, 11
  4. 5, 5, 5, 11
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een Series bevat “900”, “1,600” en “bad”. Welke waarden blijven over nadat de komma's letterlijk zijn verwijderd en pd.to_numeric(..., errors="coerce") is toegepast?
  1. 900, 1600, 0
  2. “900”, “1600”, “bad”
  3. 900, NaN, NaN
  4. 900, 1600, NaN
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een niet-constante Series bevat 5, 15 en 25. Wat is de waarde van 15 na min-maxschaling?
  1. 0,0
  2. 0,6
  3. 0,5
  4. 0,4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een categorische kolom staat “low” en “high” toe. Wat moet er gebeuren voordat “medium” aan een rij kan worden toegekend?
  1. Sorteer de bestaande categoriecodes.
  2. Verwijder ongebruikte bestaande categorieën.
  3. Voeg “medium” toe aan de categorieën.
  4. Stel de huidige ordening in op waar.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een Series bevat “Park Rd”, “Rd” en “Road”. Wat is het resultaat van s.replace("Rd", "Road")?
  1. “Park Rd”, “Road”, “Road”
  2. “Park Rd”, “Rd”, “Road”
  3. “Park Road”, “Road”, “Road”
  4. “Park Road”, “Rd”, “Road”
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een sensortabel heeft de sleutels S, S, T en moet alle waarnemingen behouden. De bijbehorende opzoektabel heeft één rij voor S en één voor T. Welke samenvoeginstellingen drukken deze eis uit?
  1. how="left", validate="one_to_many"
  2. how="outer", validate="one_to_one"
  3. how="inner", validate="one_to_one"
  4. how="left", validate="many_to_one"
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Series a heeft p = 4, q = NaN; Series b heeft q = 9, r = 2. Wat is a.combine_first(b)?
  1. p = 4, q = 9
  2. p = 4, q = 9, r = 2
  3. p = 4, q = NaN
  4. p = NaN, q = 9, r = 2
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een tabel met een index van locatie/maand heeft voor C/6 de metingen 2 en 5, voor D/6 de meting 4 en voor C/7 de meting 9. Een analist verwisselt de niveaus en probeert daarna met .loc["C"] totalen per locatie voor maand 6 te krijgen. Welke correctie behoudt de metingen en geeft de benodigde totalen?
  1. Groepeer alle rijen op locatie vóór selectie voor het rapport: C = 16, D = 4.
  2. Gebruik xs("C", level="site") en groepeer dan op maand: 6 = 7, 7 = 9.
  3. Verwijder herhaalde combinaties van locatie en maand en selecteer maand 6: C = 2, D = 4.
  4. Gebruik xs(6, level="month") en groepeer dan op locatie: C = 7, D = 4.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een lange Series heeft metingen per locatie/periode A/1 = 2, A/1 = 4, A/2 = 5, B/1 = 3. Van de twee metingen voor A/1 moet het gemiddelde worden genomen; een afwezige combinatie is onbekend. Je hebt alle combinaties van locatie en periode nodig in een breed rapport en daarna in een export in lang formaat. Welk plan past?
  1. Neem het gemiddelde van A/1, gebruik unstack, dan stack en verwijder ontbrekende waarden: 3 bekende waarden.
  2. Neem het gemiddelde van A/1, gebruik unstack en dan stack: 4 waarden, waarvan één ontbreekt.
  3. Behoud de eerste A/1, gebruik unstack en dan stack: 4 waarden, waarvan één ontbreekt.
  4. Neem het gemiddelde van A/1, gebruik unstack met nul als opvulwaarde en dan stack: 4 bekende waarden.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Volg labels, sleutels en veranderende vormen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een Series heeft de waarden "", " " en None, die rechtstreeks in het geheugen zijn gemaakt. Hoeveel waarden telt s.isna().sum()?
  1. 3
  2. 1
  3. 2
  4. 0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Rijen voor artikel Z hebben de bijwerkwaarden 2, 5 en 3, met respectievelijk de massa's 8, 11 en 9 kg. Welke massa blijft over nadat je de bijwerkwaarden oplopend sorteert en de laatste dubbele artikelsleutel behoudt?
  1. 8 kg
  2. 28 kg
  3. 11 kg
  4. 9 kg
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een Series bevat acht verschillende metingen van 1 tot en met 8. Hoeveel metingen komen in elk van vier qcut-groepen?
  1. 1
  2. 8
  3. 2
  4. 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Beschrijvingen zijn “Oats 18kg, 4kg” en “Tea”. Wat geeft s.str.extract(r"(\d+)\s*kg", expand=False) gevolgd door numerieke conversie terug?
  1. 18 en NaN
  2. 18 en 0
  3. 22 en NaN
  4. 4 en NaN
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een tekstkolom heeft de waarden “small”, “large”, “medium”. In pandas 3.1 wordt die geconverteerd naar een vaste categorische kolom met de categorieën ["small", "large"] en daarna geteld met dropna=False. Welke aantallen verschijnen?
  1. small 1, large 2, ontbrekend 0
  2. small 1, large 1, ontbrekend 1
  3. small 1, large 1, ontbrekend 0
  4. small 1, large 1, medium 1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een outer join koppelt linkersleutels A, A, B, D aan rechtersleutels A, A, A, C. Wat zijn de aantallen _merge-rijen voor both, left_only en right_only?
  1. 6, 2, 1
  2. 6, 1, 1
  3. 3, 2, 1
  4. 2, 2, 1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Series x heeft a = 2, b = 6 en y heeft b = 4, c = 8. Wat is na x.add(y, fill_value=0) de som van de resulterende waarden?
  1. 24
  2. 12
  3. 20
  4. 10
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een index heeft stad als buitenste niveau en jaar als binnenste niveau. Wat selecteert .loc[2027] na swaplevel("city", "year").sort_index()?
  1. Rijen vanaf 2027.
  2. De rij op positie 2027.
  3. De stad met label 2027.
  4. Alle rijen in het jaar 2027.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

De aantallen gebeurtenissen zijn N/1 = 7, N/2 = 9, S/1 = 3, zonder record voor S/2. Het gebeurtenissenlogboek is volledig, dus afwezigheid betekent geen gebeurtenissen. Een rapport moet elke combinatie van locatie en periode tonen en die dekking behouden in een export in lang formaat. Welk plan en resultaat passen?
  1. Unstack, stack en voorwaarts opvullen: 4 waarden met totaal 22.
  2. Unstack, stack en ontbrekende waarden verwijderen: 3 waarden met totaal 19.
  3. Unstack met nul als opvulwaarde, dan stack: 3 waarden met totaal 19.
  4. Unstack met nul als opvulwaarde, dan stack: 4 waarden met totaal 19.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een lange tabel heeft voor P/2026 de waarden 8 en 12 en voor Q/2026 de waarde 6. Wat ontstaat als je een pivot_table gebruikt met locaties als rijen, jaren als kolommen en de standaardaggregatie, en daarna de ene jaarkolom omzet met melt?
  1. 2 rijen met waarden 10, 6
  2. 3 rijen met waarden 10, 10, 6
  3. 3 rijen met waarden 8, 12, 6
  4. 2 rijen met waarden 20, 6
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Onderzoek veranderingen in een opschoningsproces10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Metingen in een numerieke kolom zijn 2, 4, 30, NaN. Je bewaart een indicator voor ontbrekende waarden en vult daarna de ontbrekende waarde aan met de mediaan van de kolom. Welke waarde wordt ingevuld en hoeveel indicatorwaarden zijn waar?
  1. 3 en 1
  2. 4 en 0
  3. 12 en 1
  4. 4 en 1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een tabel bevat de sleutels “ seoul”, “SEOUL” en “busan”. De overige gegevens komen binnen elke stad overeen. Hoeveel rijen blijven over nadat je witruimte aan de buitenkant verwijdert, de sleutel klein maakt en elk lid van groepen met herhaalde sleutels verwijdert?
  1. 3
  2. 1
  3. 2
  4. 0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

De oorspronkelijke numerieke tekst is “5”, “none”, None, “ 9 ”. Hoeveel oorspronkelijk aanwezige waarden zijn na to_numeric(errors="coerce") ontbrekend geworden?
  1. 3
  2. 0
  3. 2
  4. 1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een massakolom bevat 0, 10, 20 en één onbekende meting. Na cut met de grenzen [0, 10, 20] en standaardindicatoren zijn twee rijen volledig onwaar. Je wilt geldige massa's indelen en onbekende metingen afzonderlijk herkenbaar maken. Welke oplossing past?
  1. Verwijder volledig onware rijen en behoud de oorspronkelijke intervalgrenzen.
  2. Schakel over op right=False en laat indicatoren voor ontbrekende waarden uit.
  3. Neem de laagste grens op en gebruik dummy_na=True bij het coderen.
  4. Vul onbekende massa aan met 0 en deel daarna in met include_lowest=True.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat doet s.str.split("/", n=1, expand=True) met “zone/aisle/bin”?
  1. Maakt 3 kolommen: “zone”, “aisle”, “bin”.
  2. Maakt 1 kolom met de oorspronkelijke tekst.
  3. Maakt 2 kolommen: “zone”, “aisle/bin”.
  4. Maakt 2 kolommen: “zone/aisle”, “bin”.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Codes zijn “T.8”, “T18” en “T.12”. Je moet codes met een letterlijke punt selecteren, daarna hun laatste cijfers met r"(\d+)" ophalen en converteren. Welke numerieke waarden blijven over?
  1. 8 en 12
  2. 8, 18, 12
  3. Alleen 18
  4. 8 en 1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Zendingen hebben de leverancierssleutels “ ax ”, “AX”, “by”. Een opzoektabel heeft “ax”, “ax”, “by”, met verschillende gegevens in de twee ax-rijen. Wat moet worden opgelost voordat een left join betrouwbaar één gegevensrij per zending kan geven?
  1. Behoud alleen de eerste zending per sleutel.
  2. Standaardiseer alleen de sleuteltekst van de zendingen.
  3. Hernoem alleen de overlappende gegevenskolommen.
  4. Standaardiseer sleutels en los dubbele opzoeksleutels op.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Tabel a heeft twee rijen met de kolommen id, km. Tabel b heeft één rij met de kolommen id, Km. Hoeveel cellen ontbreken in de twee afstandskolommen samen na rijconcatenatie met de standaardverwerking van kolommen?
  1. 3
  2. 2
  3. 1
  4. 0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een MultiIndex van regio/jaar bevat E/2025 = 3, E/2026 = 5, W/2025 = 7, W/2026 = 11. Een rapport heeft alleen 2026 nodig, met regio's als kolommen. Een analist selecteert .loc[2026] en gebruikt daarna pivot. Welke correctie selecteert de gegevens en levert één rapportrij op?
  1. Selecteer xs(2025, level="year"), herstel jaar als 2026 en gebruik pivot op jaar/regio: 3 en 7.
  2. Selecteer xs(2026, level="year"), herstel jaar als 2026 en gebruik pivot op jaar/regio: 5 en 11.
  3. Selecteer xs(2026, level="year"), herstel jaar als 2026 en gebruik pivot op jaar/regio: 8 en 18.
  4. Tel op per regio, herstel jaar als 2026 en gebruik pivot op jaar/regio: 8 en 18.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een tabel heeft drie unieke locaties, met de kolommen site, day en night. Eén nachtcel ontbreekt. Wat zijn het aantal lange rijen en het aantal ontbrekende cellen in de brede tabel nadat je beide metingen met melt omzet, ontbrekende waarden verwijdert en met pivot terugdraait?
  1. 5 rijen en 0 ontbrekende cellen
  2. 5 rijen en 1 ontbrekende cel
  3. 6 rijen en 0 ontbrekende cellen
  4. 6 rijen en 1 ontbrekende cel
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Redeneer door gekoppelde transformaties10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een numerieke kolom in het geheugen bevat 0, -99, NaN en 6. De documentatie definieert -99 als ontbrekend en 0 als een echte meting. Wat zijn na het opschonen het aantal bekende waarden en het gemiddelde?
  1. 2 bekend, gemiddelde 3
  2. 3 bekend, gemiddelde 2
  3. 3 bekend, gemiddelde -31
  4. 2 bekend, gemiddelde 6
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

De rijen zijn A/2/onbekend, B/onbekend/8, C/onbekend/onbekend, D/6/10 voor locatie/x/y. Behoud elke rij met minstens één bekende meting en vul daarna alleen x aan met het gemiddelde van de overgebleven x-waarden. Welke rijregel en uiteindelijke x-som passen?
  1. Behoud minstens 2 bekende cellen per rij; x-som 8.
  2. Verwijder elke rij met een ontbrekende meting; x-som 6.
  3. Behoud minstens 2 bekende cellen per rij; x-som 12.
  4. Behoud minstens 1 bekende cel per rij; x-som 16.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een Series bevat de codes “a”, “b” en “z”. De verwerking wijst waarden toe met {"a": "4", "b": "bad"} en past daarna numerieke typeconversie met ontbrekende waarden bij fouten toe. Welke oorspronkelijke waarden ontbreken uiteindelijk en waarom?
  1. Alleen b, omdat bad niet numeriek is.
  2. b en z, door mislukte conversie en opzoeking.
  3. Alleen z, omdat de sleutel ontbreekt.
  4. a en b, door de toewijzing van numeriek ogende tekst.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

De oorspronkelijke metingen zijn 3, 9, 21, 45. Een getransformeerde kolom is 0; ongeveer 0,333; 1; 1 in dezelfde volgorde. Welke volgorde van bewerkingen verklaart de uitvoer en behoudt elke rij?
  1. Begrens op 21 en pas daarna min-maxschaling toe op de begrensde kolom.
  2. Deel door 45 en begrens daarna geschaalde waarden op 1.
  3. Begrens op 21 en deel daarna de begrensde kolom door 21.
  4. Pas min-maxschaling toe op de oorspronkelijke kolom en begrens daarna op 1.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een ongeordende categorische kolom bevat landlabels en heeft gehele codes. Een model interpreteert numerieke invoer als hoeveelheden. Waarom moeten deze codes door categorie-indicatoren worden vervangen?
  1. Codes kunnen niet in numerieke kolommen worden opgeslagen.
  2. Indicatoren maken een juiste rangorde van landen.
  3. Codes zouden een verzonnen volgorde en afstand opleggen.
  4. Codes gebruiken meer geheugen dan alle tekstwaarden.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Zendingen hebben de sleutels U, U, V, W. Een leveranciersopzoektabel heeft U/bijwerking 1, U/bijwerking 4, V/bijwerking 2, X/bijwerking 2. Je hebt de nieuwste gegevens per leverancier nodig, alle zendingen moeten behouden blijven en je hebt het aantal unieke sleutels zonder overeenkomst in beide bronnen nodig. Welk plan past?
  1. Behoud nieuwste opzoeksleutels; controleer met outer join; inner join heeft 3 rijen en 2 sleutels zonder overeenkomst.
  2. Behoud nieuwste opzoeksleutels; controleer met inner join; left join heeft 4 rijen en 0 sleutels zonder overeenkomst.
  3. Behoud één zending per sleutel; controleer met outer join; left join heeft 3 rijen en 2 sleutels zonder overeenkomst.
  4. Behoud nieuwste opzoeksleutels; controleer met outer join; left join heeft 4 rijen en 2 sleutels zonder overeenkomst.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

De hoofdwaarden zijn a = 5, b = NaN; de reservewaarden zijn a = 50, b = 7, c = 9. Wat zou na primary.combine_first(backup) veranderen als je de voorrang van de bronnen omdraait?
  1. Alleen c verdwijnt uit het resultaat.
  2. Alleen a verandert van 5 in 50.
  3. Elke resultaatwaarde verandert.
  4. Alleen b verandert van 7 in ontbrekend.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Twee DataFrames hebben elk de kolommen kg en count, beide met "Int64", dat ontbrekende waarden ondersteunt. Een derde heeft alleen kg met dat datatype. Wat verklaart de resulterende kolom count na rijconcatenatie het best?
  1. De kolom verliest elke rij uit de derde invoer.
  2. De kolom blijft een geheelgetaltype met ontbrekende waarden voor de derde invoer.
  3. De kolom wordt tekst omdat een invoer count mist.
  4. De kolom wordt een gewoon geheelgetaltype met nullen voor de derde invoer.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Gebeurtenisrecords zijn A/1 = 4, A/1 = 6, A/2 = 8, B/1 = 3. Het logboek is volledig en een rapport moet elk totaal per locatie en periode tonen, inclusief combinaties zonder gebeurtenissen, en daarna dezelfde dekking als lange rijen exporteren. Welk plan geeft de vereiste export?
  1. Tel herhaalde combinaties op, gebruik unstack met nul en dan stack: 4 rijen, som 21.
  2. Behoud de eerste herhaalde combinatie, gebruik unstack met nul en dan stack: 4 rijen, som 15.
  3. Middel herhaalde combinaties, gebruik unstack met nul en dan stack: 4 rijen, som 16.
  4. Tel herhaalde combinaties op, gebruik unstack en dan stack en verwijder ontbrekende waarden: 3 rijen, som 21.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Bekende aantallen gebeurtenissen zijn A/1 = 4, A/1 = 8, A/2 = 6, B/1 = 5; B/2 heeft geen record en is onbekend. Een analist gebruikt een standaarddraaitabel en zet die daarna met melt om, met de bewering totalen voor bekende combinaties te exporteren. Welke aangepaste uitvoer en redenering passen?
  1. Vier rijen met totaal 23, omdat melt beide A/1-records terughaalt.
  2. Vier rijen met totaal 23, omdat nul de onbekende combinatie kan vervangen.
  3. Drie rijen met totaal 17, omdat het standaardgemiddelde een combinatietotaal is.
  4. Drie rijen met totaal 23, na aggregatie met de som en verwijdering van onbekende cellen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

72 Kernbegrippen, elk met een definitie

A

achtervoegsel
Een achtervoegsel is tekst die bij het combineren wordt toegevoegd aan overlappende kolomnamen die geen sleutel zijn, zodat de bron van elke kolom te onderscheiden blijft.
Een achtervoegsel zoals _sensor onderscheidt een meetkolom van een gelijknamige kolom in een reservetabel.
achterwaarts opvullen
Achterwaarts opvullen kopieert de volgende bekende waarde naar eerdere ontbrekende plaatsen, zodat de betekenis afhangt van de volgorde van de waarnemingen.
Achterwaarts opvullen neemt de volgende bekende meting als opvulwaarde voor een eerdere niet-beschikbare meting.
as
Een as is een richting van een pandas-object; concatenatie langs as 0 voegt rijen toe en langs as 1 kolommen.
Kies as 1 als je twee meet-Series naast elkaar plaatst op overeenkomende indexlabels.

B

begrenzen
Begrenzen vervangt metingen voorbij een gekozen grens door de grens zelf. De waarnemingen blijven behouden, maar hun waarden veranderen.
Begrenzen op 80 kg verandert een waarde van 95 kg in 80 kg; controleer daarom eerst of die extreme meting echt is.
breed formaat
Breed formaat verdeelt metingen over meerdere kolommen, vaak met één rij per entiteit en een eigen kolom voor elk meetlabel.
Breed formaat plaatst drie jaarlijkse verkoopcijfers naast elke stad voor directe vergelijking tussen jaren.
bronsleutel
Een bronsleutel die aan concat wordt meegegeven, wordt een buitenste indexlabel dat het deel identificeert waaruit elke rij of kolom afkomstig is.
Met een bronsleutel genaamd “batch_a” kun je die rijen ophalen, ook als binnenste rijnummers in meerdere gegevensblokken voorkomen.

C

categoriecode
Een categoriecode is een gehele identificatiecode die naar een label in een categorische lijst verwijst, zonder een gemeten afstand tussen labels te impliceren.
Een categoriecode voor een land is een opslagcode; behandel die dus niet als de numerieke rang van het land.
categorisch datatype
Een categorisch datatype slaat een vastgelegde lijst met labels en een gehele code per rij op, met een optionele betekenisvolle ordening van de labels.
Een categorisch datatype kan een kleine verzameling herhaalde labels voor productmaten efficiënter opslaan dan herhaalde tekst.
combine_first
De methode combine_first behoudt de bekende waarden van een eerste object, vult ontbrekende waarden aan vanuit overeenkomende labels in een ander object en voegt nieuwe labels toe.
Gebruik combine_first om ontbrekende metingen vanuit een reservebron aan te vullen en bekende waarden uit de hoofdbron te behouden.
concatenatie
Concatenatie plaatst pandas-objecten langs rijen of kolommen en lijnt labels op de andere as uit, zonder gewone sleutelwaarden te vergelijken.
Rijconcatenatie verzamelt opeenvolgende gegevensblokken met pakketwaarnemingen in één langere tabel.

D

datatype met ondersteuning voor ontbrekende waarden
Een datatype met ondersteuning voor ontbrekende waarden slaat waarden van een bepaald type op samen met een markering voor ontbrekende waarden, zoals "Int64" voor gehele getallen met pd.NA.
Een datatype met ondersteuning voor ontbrekende waarden behoudt aantallen pakketten als gehele getallen, ook als bij één record het aantal onbekend is.
doorsnede
Een doorsnede selecteert één waarde uit een benoemd indexniveau over de andere niveaus heen, zodat je een binnenste niveau rechtstreeks kunt selecteren.
Een doorsnede voor het jaar 2026 haalt dat jaar op voor alle steden in een MultiIndex van stad/jaar.
dropna
De methode dropna verwijdert rijen of kolommen op basis van hun ontbrekende waarden, met opties voor geselecteerde kolommen en vereiste aantallen aanwezige waarden.
Gebruik dropna(subset=["mass_kg"]) als bruikbare rijen een massa moeten hebben, ook als een ander veld onvolledig is.
dubbele rij
Een dubbele rij herhaalt een andere rij in alle vergeleken kolommen; pandas markeert standaard latere kopieën en negeert indexlabels.
Een dubbele rij met een andere numerieke index telt nog steeds als kopie als alle gegevenswaarden overeenkomen.

G

geordende categorische variabele
Een geordende categorische variabele heeft een vastgelegde labelvolgorde die het sorteren en geordende vergelijkingen bepaalt in plaats van de alfabetische schrijfwijze.
Een geordende categorische variabele met S, M, L plaatst maten in de bedoelde volgorde als de kolom wordt gesorteerd.
gevectoriseerde bewerking
Een gevectoriseerde bewerking werkt op een hele Series of array en drukt dezelfde berekening voor alle waarden uit zonder een Python-lus per element.
De kilometerkolom met 1000 vermenigvuldigen is een gevectoriseerde bewerking die afstanden in meters oplevert.
gretige herhaling
Gretige herhaling komt met zo veel mogelijk tekst overeen terwijl de rest van het patroon nog kan overeenkomen, soms over meerdere scheidingstekens heen.
Gretige herhaling in r"<.*>" kan beide tags en de tekst ertussen omvatten in een korte tekenreeks met opmaak.

H

herkomstindicator bij samenvoeging
Een herkomstindicator bij samenvoeging labelt elke resultaatrij naar de herkomst van de overeenkomst: beide invoeren, alleen de linkerinvoer of alleen de rechterinvoer.
Tel de herkomstindicator na een outer join om rijen te vinden die aan een van beide kanten geen overeenkomst hadden.
herstructureren
Herstructureren verandert hoe waarden en hun identificerende labels over rijen en kolommen zijn verdeeld, zonder zelf een aggregatie te kiezen.
Als je een volledige Series met stad/jaar herstructureert tot een brede tabel, blijft elke waarde bij de eigen combinatie van stad/jaar staan.
hoofdlettergebruik normaliseren
Hoofdlettergebruik normaliseren geeft tekst een consistent gebruik van hoofdletters en kleine letters, zodat varianten als hetzelfde label kunnen worden vergeleken.
Door hoofdlettergebruik te normaliseren komen “PUNE” en “pune” overeen voordat de records worden geteld of samengevoegd.

I

id_vars
Het argument id_vars wijst kolommen aan die tijdens melt behouden blijven en onderscheidt zo identificatiekolommen van kolommen met metingen.
Als je id_vars="station" instelt, blijven stationsnamen buiten de numerieke metingen die door melt ontstaan.
ignore_index
De optie ignore_index vervangt labels langs de concatenatieas door opeenvolgende gehele getallen en behoudt de uitlijning op de andere as.
Stel ignore_index=True in als maandbestanden rijnummers hebben die geen betekenis hebben en anders zouden worden herhaald.
imputatie
Imputatie vervangt ontbrekende gegevens door geschatte of gekozen waarden. Daarmee blijven rijen behouden, maar verandert de waargenomen verdeling van een kolom.
Gemiddelde-imputatie vult een ontbrekende temperatuur aan met het gemiddelde van de bekende metingen en verkleint de zichtbare spreiding.
indexniveau
Een indexniveau is één benoemd of onbenoemd onderdeel van een hiërarchische index, zoals stad of jaar, met een positie en een optionele naam.
Als je jaar naar het buitenste indexniveau verplaatst, wordt jaar het eerste label dat een loc-selectie met één label gebruikt.
indicatorkolom
Een indicatorkolom geeft aan of een rij tot een categorie behoort, meestal met booleaanse waarden of met nullen en enen voor numerieke invoer.
Een indicatorkolom voor “blue” die met get_dummies is gemaakt, is alleen waar voor rijen met het label blue.
inner join
Een inner join behoudt rijparen waarvan de sleutels aan beide kanten overeenkomen en sluit waarnemingen uit die geen sleutelovereenkomst in de andere tabel hebben.
Een inner join verwijdert een levering waarvan de station-ID geen overeenkomende rij in de stationsopzoektabel heeft.
interpolatie
Interpolatie schat waarden tussen bekende metingen; lineaire interpolatie in pandas gebruikt hun posities om een rechtlijnig verloop in te vullen.
Interpolatie zet de geordende metingen 8, NaN, 12 om in 8, 10, 12 als een rechtlijnige schatting past.

K

klasse
Een klasse is een numeriek interval om metingen te groeperen, met vastgelegde grenspunten die bepalen waar grenswaarden bij horen.
In een klasse geschreven als (0, 10] is de meting 10 inbegrepen en de meting 0 uitgesloten.
klasse-indeling op basis van kwantielen
Klasse-indeling op basis van kwantielen verdeelt gerangschikte metingen in groepen met ongeveer gelijke aantallen waarnemingen, waarbij hun numerieke breedtes kunnen verschillen.
Gebruik klasse-indeling op basis van kwantielen met qcut om lage, middelste en hoge groepen met vergelijkbare aantallen metingen te vergelijken.
kopiëren bij schrijven
Kopiëren bij schrijven voorkomt dat wijzigingen in een geselecteerd pandas-object ongemerkt een ander object veranderen dat dezelfde onderliggende gegevens deelt.
Bij kopiëren bij schrijven ken je een aangevulde Series opnieuw toe aan de DataFrame-kolom om de bovenliggende tabel bij te werken.
koppeling op de index
Een koppeling op de index koppelt tabellen via indexlabels; pandas join gebruikt de rechterindex ook als een linkersleutelkolom is opgegeven.
Een koppeling op de index kan stationshoogtes toevoegen aan herhaalde metingen zonder ze op rijpositie te koppelen.

L

lang formaat
Lang formaat slaat meetlabels op als waarden in identificerende kolommen, met waarnemingen in rijen en één gemeenschappelijke kolom met meetwaarden.
Lang formaat plaatst stad, jaar en verkopen in kolommen, zodat elke waarneming voor stad/jaar één rij inneemt.
left join
Een left join behoudt elke rij aan de linkerkant en de bijbehorende overeenkomsten, en levert ontbrekende velden aan de rechterkant als een linkersleutel geen overeenkomst heeft.
Een left join behoudt een bestelling met een onbekende klantsleutel, zodat de ontbrekende opzoekgegevens zichtbaar blijven.
letterlijke patroonvergelijking
Letterlijke patroonvergelijking zoekt naar de exact opgegeven tekens en geeft speciale symbolen uit reguliere expressies, zoals een punt, geen patroonbetekenis.
Gebruik letterlijke patroonvergelijking om de punt uit een code te verwijderen zonder die als patroon voor een willekeurig teken te behandelen.

M

map
De methode map wijst waarden in een Series aan andere waarden toe via een functie of opzoektabel; bij een dictionary worden onbekende sleutels ontbrekend.
Een map voor landcodes maakt codes die niet in de dictionary staan zichtbaar als ontbrekende waarden die de analist kan inspecteren.
masker voor ontbrekende waarden
Een masker voor ontbrekende waarden is een booleaans object dat aangeeft waar waarden ontbreken en dezelfde labels en vorm heeft als het gecontroleerde object.
Als je een masker voor ontbrekende waarden per kolom optelt, zie je hoeveel temperatuur- en neerslagcellen aandacht nodig hebben.
melt
De methode melt zet meetkolommen om in rijen met labels en waarden en behoudt en herhaalt de kolommen die als rij-identificatie zijn aangewezen.
Een melt van vier jaarkolommen maakt vier rijen per stad, inclusief rijen voor lege meetcellen.
min-maxschaling
Min-maxschaling trekt het minimum van een kolom af en deelt door het bereik, dat niet nul mag zijn. Zo wordt het waargenomen minimum 0 en het maximum 1.
Voor de metingen 2, 5, 8 geeft min-maxschaling 0, 0,5, 1 met het oorspronkelijke bereik van 6.
MultiIndex
Een MultiIndex identificeert een pandas-rij of -kolom met meerdere labelniveaus, zodat een volledig label een tuple van waarden over die niveaus is.
Een MultiIndex met stad en jaar identificeert de metingen van dezelfde stad afzonderlijk voor elk jaar.

N

NaN
NaN is een markering voor ontbrekende waarden in float-kolommen en de standaardtekstkolommen van pandas 3; bij gewone gelijkheidsvergelijkingen is NaN niet gelijk aan zichzelf.
Gebruik isna() om NaN in de temperatuurkolom te vinden voordat je de metingen telt die beschikbaar zijn voor een gemiddelde.
NaT
NaT is de pandas-markering voor ontbrekende datum- en tijdwaarden, waarmee een datetime-kolom een niet-beschikbare datum of tijdstempel kan weergeven.
Een ontbrekende inspectiedatum verschijnt als NaT en isna() herkent die naast ontbrekende numerieke metingen.

O

ongebruikte categorie
Een ongebruikte categorie is een toegestaan categorisch label zonder huidige waarnemingen, dat in tellingen blijft staan totdat het uit de lijst wordt verwijderd.
Een ongebruikte categorie L verschijnt met aantal 0 als een maatkolom momenteel alleen S en M bevat.
ontbrekende combinatie
Een ontbrekende combinatie is een verzameling labels zonder bijbehorende waarneming, die bij omzetting naar breed formaat als ontbrekende cel in een rechthoek zichtbaar kan worden.
Een ontbrekende combinatie voor een station en maand verschijnt als NaN wanneer de lange metingen met unstack worden omgezet.
ontbrekende waarde
Een ontbrekende waarde markeert een waarneming die onbekend of niet beschikbaar is, met een door pandas herkende markering in plaats van gewone gegevens.
Een ontbrekende waarde in rain_mm betekent dat de meting niet beschikbaar is en moet dus worden onderscheiden van geen regen.
outer join
Een outer join behoudt sleutels die aan een van beide kanten voorkomen en toont ontbrekende velden waar een sleutel geen overeenkomende rij in de andere invoer heeft.
Een outer join maakt zowel bestellingen zonder klantgegevens als klanten zonder geregistreerde bestelling zichtbaar.

P

pivot
De methode pivot zet lange gegevens om naar breed formaat door gekozen combinaties van index en kolom in cellen te plaatsen, en geeft een fout als een combinatie meerdere waarden identificeert.
Een pivot van station en maand vereist één meting voor elke cel van station/maand in de uitvoer.
pivot_table
De methode pivot_table combineert waarden voor herhaalde combinaties van index en kolom via een aggregatie en gebruikt het gemiddelde als er geen is opgegeven.
Gebruik pivot_table met aggfunc="sum" als afzonderlijke zendingen moeten worden opgeteld tot een dagtotaal.

R

recordsleutel
Een recordsleutel is een kolom of combinatie van kolommen die één werkelijk record identificeert en bepaalt welke herhalingen onderzoek vereisen.
Een bestel-ID is een recordsleutel, terwijl een klant-ID terecht op meerdere afzonderlijke bestellingen kan voorkomen.
reguliere expressie
Een reguliere expressie is een tekstpatroon opgebouwd uit tekenregels en herhaling, waarmee je gestructureerde tekst test, ophaalt of vervangt.
Een reguliere expressie kan een gehele massa gevolgd door “kg” vinden, ook als de tussenruimte varieert.
rename
De methode rename wijzigt rij- of kolomlabels via een waardetoewijzing of functie en laat de opgeslagen gegevenswaarden ongemoeid.
Gebruik rename(columns={"Weight": "mass_kg"}) om een kolomkop een duidelijke betekenis te geven zonder de cellen te wijzigen.
replace
De methode replace vervangt exact overeenkomende waarden en laat waarden zonder overeenkomst ongewijzigd, met behulp van een scalaire waarde, lijst of dictionary.
Een dictionary voor replace kan “pending” veranderen in “open” zonder de andere statuswaarden te wijzigen.
reset_index
De methode reset_index verplaatst één of meer indexniveaus naar gewone kolommen en levert een index voor de resterende indeling.
Gebruik reset_index(level="year") om jaar als kolom te herstellen en stad in de index te laten staan.
ruwe tekenreeks
Een ruwe tekenreeks is een Python-tekenreeksvorm met het voorvoegsel r die backslashes behoudt voor toepassingen zoals patronen in reguliere expressies.
Schrijf een cijferpatroon als ruwe tekenreeks, r"\d+", zodat de backslash de reguliere-expressieverwerker bereikt.

S

samenvoeging op sleutels
Een samenvoeging op sleutels koppelt rijen via sleutelwaarden en combineert hun velden. Daarbij ontstaan alle overeenkomende paren die het gekozen type join toestaat.
Een samenvoeging op sleutels voegt één klantopzoekrij toe aan elke bestelling waarvan de klantsleutel een overeenkomst heeft.
sortering op de index
Sortering op de index ordent rijen op hun indexlabels, maakt deelbereiken van labels bruikbaar en groepeert een MultiIndex volgens de volgorde van de niveaus.
Pas sortering op de index toe nadat je de niveaus stad en jaar hebt verwisseld, zodat de rijen de nieuwe volgorde met jaar eerst volgen.
stack
De methode stack verplaatst een kolomlabelniveau naar een binnenste rijindexniveau en geeft een Series of DataFrame terug, afhankelijk van de overgebleven niveaus.
Als je stack aanroept op een stadstabel met jaarkolommen, krijg je indexparen van stad/jaar voor dezelfde verkoopwaarden.
str-accessor
De str-accessor biedt gevectoriseerde tekstmethoden op een Series, zodat je elke aanwezige tekenreeks kunt opschonen of doorzoeken.
Gebruik de str-accessor in s.str.lower() om een hele stadskolom in één expressie klein te maken.
subset
Het argument subset beperkt een controle op duplicaten of ontbrekende gegevens tot genoemde kolommen en laat andere kolommen buiten die beslissing.
Gebruik subset="order_id" om herhaalde bestelsleutels op te sporen, ook als hun geregistreerde gewichten verschillen.

T

tekenklasse
Een tekenklasse beschrijft één toegestaan teken, met een verkorte notatie zoals \d of een bereik zoals [A-Z] in een patroon.
De tekenklasse [A-Z] komt overeen met één hoofdletter in een voorraadcode vóór de cijfers.
tekenreeksen splitsen
Tekenreeksen splitsen verdeelt tekst bij een gekozen scheidingsteken en levert lijsten met delen of, als je uitvouwen kiest, afzonderlijke kolommen op.
Als je “Silva, Ana” splitst bij “, ”, ontstaan een deel met de achternaam en een deel met de voornaam.
typeconversie
Typeconversie verandert hoe waarden worden opgeslagen en geïnterpreteerd, bijvoorbeeld door cijfertekst om te zetten in getallen om ermee te rekenen.
Typeconversie is nodig voordat de tekst “7.5” als gemeten massa in een numerieke berekening kan worden gebruikt.
typeconversie met ontbrekende waarden bij fouten
Typeconversie met ontbrekende waarden bij fouten in to_numeric zet leesbare waarden om in getallen en maakt onleesbare waarden ontbrekend in plaats van een fout te geven.
Inspecteer na typeconversie met ontbrekende waarden bij fouten de oorspronkelijke tekst van elke nieuw ontbrekende massa om onbekende opmaak te vinden.

U

uitlijning op labels
Uitlijning op labels koppelt pandas-waarden op hun rij- of kolomlabels, zodat objecten in een andere volgorde toch dezelfde waarnemingen kunnen koppelen.
Als twee Series worden opgeteld, telt uitlijning op labels hun waarden met label b bij elkaar op, ook als b in elke Series een andere positie inneemt.
uniciteit
Uniciteit betekent dat geen gecontroleerde sleutelwaarde of sleutelcombinatie wordt herhaald, een vereiste voor opzoektabellen met één rij per sleutel.
Controleer de uniciteit van de klantopzoektabel voordat je de gegevens ervan toevoegt aan een tabel met veel bestellingen.
unstack
De methode unstack verplaatst een rijindexniveau naar kolommen en vereist unieke volledige indexlabels om één waarde in elke uitvoercel te plaatsen.
Gebruik unstack("year") om elk jaar in een afzonderlijke verkoopkolom voor elke stad te plaatsen.

V

vastleggroep
Een vastleggroep markeert met haakjes een deel van een reguliere expressie, zodat de overeenkomende tekst als opgehaald uitvoerveld kan worden teruggegeven.
Een vastleggroep rond de cijfers in een massapatroon geeft “14” terug uit de tekst “Lentils 14 kg”.
veel-op-éénrelatie
Een veel-op-éénrelatie staat herhaalde linkersleutels toe maar vereist unieke rechtersleutels, zoals bij veel bestellingen die overeenkomen met één klantrecord.
Valideer een veel-op-éénrelatie als je leveringen aanvult vanuit een opzoektabel met één rij per station.
vereniging van categorieën
Een vereniging van categorieën combineert de labels die categorische invoer toestaat, zodat concatenatie ook bij verschillende lijsten een categorische uitvoer kan behouden.
Gebruik een vereniging van categorieën als twee gegevensblokken verschillende toegestane kleuren hebben en de gecombineerde kolom beide lijsten moet behouden.
volledige patroonovereenkomst
Een volledige patroonovereenkomst vereist dat de hele invoertekenreeks aan een patroon voldoet, zodat een geldig fragment binnen een langere waarde niet volstaat.
Een volledige patroonovereenkomst met r"\d+" accepteert “204” en wijst “204x” af, ook al bevatten beide tekenreeksen cijfers.
voorwaarts opvullen
Voorwaarts opvullen kopieert de meest recente bekende waarde naar latere ontbrekende plaatsen in een betekenisvolle rijvolgorde, met een optionele limiet voor de reeks.
Voorwaarts opvullen kan een stabiele instrumentinstelling naar de volgende rij overnemen, maar kan een ontbrekende waarde aan het begin niet aanvullen.

W

witruimte
Witruimte bestaat uit tekens voor tussenruimte, zoals spaties en tabs, die binnen tekst betekenisvol of rond een label ongewenst kunnen zijn.
Witruimte aan de buitenkant maakt “Lima ” verschillend van “Lima” totdat de stadswaarden met str.strip() worden opgeschoond.

Z

z-score
Een z-score drukt de afstand van een waarde boven of onder het gemiddelde uit, gedeeld door de standaardafwijking die voor die kolom wordt gebruikt.
Een z-score van -1 plaatst een meting één standaardafwijking onder het gemiddelde, niet in een benoemd interval.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag