Gegevenstabellen met pandas in Python

Leer met pandas werken met gegevenstabellen in Python. Maak Series en DataFrames, lees een CSV-bestand in en controleer de ingelezen gegevens. Selecteer precies de rijen en kolommen die je nodig hebt op label met loc en op positie met iloc. Filter rijen op voorwaarden, voeg kolommen toe en transformeer ze, sorteer waarden en ken er rangnummers aan toe. Vat gegevens samen met beschrijvende statistiek, waardefrequenties en correlatie. De voorbeelden volgen pandas 3.

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

Wat je leert

  1. Beschrijf hoe pandas eendimensionale en tweedimensionale gegevens met labels opslaat, maak Series en DataFrames uit Python-gegevens en beheer hun rij- en kolomlabels.
    • Maak een Series en gebruik de index
      Maak een Series uit een lijst of dictionary, lees de waarden, index, het datatype en de naam uit en voorspel hoe labels zich gedragen bij berekeningen en zoekopdrachten.
    • Maak een DataFrame en doorgrond de structuur
      Maak een DataFrame uit Python-gegevens, lees de vorm, kolommen, index en datatypes uit, selecteer een kolom als Series en gebruik het argument axis correct.
    • Stel labels in, stel ze opnieuw in, hernoem ze en verwijder ze
      Kies een betekenisvolle rijindex, verplaats die terug naar een kolom, hernoem en verwijder rijen of kolommen en bewaar de resultaten door ze opnieuw toe te wijzen.
  2. Lees een CSV-bestand met de juiste opties in een DataFrame in, inspecteer het resultaat systematisch en converteer kolommen naar de datatypes die de analyse nodig heeft.
    • Lees een CSV-bestand in met read_csv
      Lees een bestand met komma's als scheidingsteken in met pd.read_csv, begrijp hoe pandas kolomtypes afleidt en gebruik de opties voor scheidingstekens, decimalen, kopregels, ontbrekende waarden en identificatiecodes.
    • Inspecteer een nieuw DataFrame
      Controleer een zojuist ingelezen tabel met head, info, shape, dtypes en aantallen ontbrekende en unieke waarden voordat je de tabel analyseert.
    • Converteer kolommen naar de juiste datatypes
      Wijzig het datatype van een kolom met astype, pd.to_numeric en pd.to_datetime, en bewaar de geconverteerde kolom door die terug te wijzen.
  3. Selecteer precies de rijen, kolommen en afzonderlijke waarden die je nodig hebt met loc (labels) en iloc (posities), en voorspel de vorm en het type van elk resultaat.
    • Selecteer rijen en kolommen op label met loc
      Gebruik df.loc[rows, columns] met afzonderlijke labels, lijsten, deelbereiken inclusief beide grenzen en booleaanse maskers, en herken wanneer een label niet bestaat.
    • Selecteer op positie met iloc en kies de juiste indexeringsmethode
      Gebruik df.iloc[rows, columns] met gehele posities, deelbereiken exclusief eindpunt en negatieve posities, lees afzonderlijke waarden met at en iat en kies tussen selectie op label en op positie.
  4. Behoud alleen de rijen die aan één of meer voorwaarden voldoen, met booleaanse maskers, hulpmethoden voor veelgebruikte controles en query, en wijzig waarden in geselecteerde rijen op een veilige manier.
    • Filter met booleaanse maskers
      Maak met een vergelijking een True/False-masker, combineer voorwaarden met &, | en ~, tel overeenkomsten en begrijp hoe ontbrekende waarden zich bij vergelijkingen gedragen.
    • Gebruik hulpmethoden en query voor veelgebruikte filters
      Filter met isin, between, isna/notna en str.contains, en schrijf dezelfde voorwaarden als een leesbare query-tekenreeks.
    • Wijzig waarden in geselecteerde rijen op een veilige manier
      Werk waarden bij in rijen die aan een voorwaarde voldoen met één loc-toewijzing, en vermijd geketende toekenning, die de oorspronkelijke tabel in pandas 3 niet wijzigt.
  5. Maak nieuwe kolommen uit bestaande kolommen met gevectoriseerde berekeningen en assign, en hercodeer of transformeer waarden met np.where, map, apply en replace.
    • Bereken nieuwe kolommen uit bestaande kolommen
      Voeg met gevectoriseerde berekeningen een kolom toe of overschrijf een kolom, gebruik assign om kolommen in een keten te maken en voorspel hoe ontbrekende waarden en uitlijning op de index het resultaat beïnvloeden.
    • Hercodeer en transformeer waarden met np.where, map en apply
      Zet voorwaarden met np.where om in labels, wijs met map en replace andere waarden toe, pas met apply eigen functies toe en geef waar mogelijk de voorkeur aan gevectoriseerde vormen.
  6. Orden rijen op één of meer kolommen, ken rangnummers toe met een passende regel voor gelijke waarden, bereken beschrijvende statistieken voor numerieke en tekstkolommen en tel waarden en meet samenhang.
    • Sorteer rijen op waarden of op de index
      Sorteer een DataFrame op één of meer kolommen in beide richtingen, bepaal waar ontbrekende en gelijke waarden komen en zoek de bovenste of onderste rijen.
    • Ken rangnummers toe aan waarden en verwerk gelijke waarden
      Geef elke waarde met rank een rangnummer, kies een methode voor gelijke waarden die bij het doel past en druk rangnummers uit als percentielen.
    • Vat kolommen samen met beschrijvende statistiek
      Bereken aantallen, totalen, centrum- en spreidingsmaten en kwartielen met pandas-methoden en describe, interpreteer ze en verwerk ontbrekende waarden en tekstkolommen correct.
    • Tel waarden en meet samenhang
      Tel hoe vaak elke waarde voorkomt, toon unieke waarden, druk aantallen uit als aandelen en meet het lineaire verband tussen twee numerieke kolommen met correlatie.

Gegevenstabellen met pandas: uitleg

6 hoofdstukken

1

Begrijp Series en DataFrames

Labels maken van een reeks getallen gegevens die je kunt identificeren en combineren. Maak een Series voor één variabele en een DataFrame voor meerdere variabelen en lees vervolgens hun afmetingen en datatypes uit. Je ziet waarom overeenkomende labels belangrijk zijn bij berekeningen, hoe een kolom verschilt van een tabel met één kolom en hoe het kiezen, opnieuw instellen of hernoemen van een index latere zoekopdrachten verandert. Deze structuren vormen de basis voor elke selectie en berekening die volgt.

1.1 Maak een Series en gebruik de index

Een Series bewaart een reeks waarden samen met labels. Die labels geven de waarden betekenis: een neerslagmeting hoort bij een dag en een bevolkingsaantal bij een stad. Importeer pandas en NumPy met hun gebruikelijke korte namen.

import pandas as pd
import numpy as np
rain = pd.Series([4.5, 3.0, 6.2],
                 index=["Mon", "Tue", "Wed"], name="rain_mm")
Lees waarden en labels uit

De waarden zijn 4,5, 3,0 en 6,2; de index is Mon, Tue en Wed. Zonder index= geeft pandas de labels 0, 1 en 2. Een dictionary levert beide tegelijk: pd.Series({"Lima": 10, "Oslo": 5, "Pune": 7}) haalt de labels uit de sleutels, in de volgorde van de dictionary.

Attributen beschrijven de Series zonder haakjes: rain.index bevat de labels, rain.dtype is float64, rain.name is "rain_mm" en rain.size is 3. Gebruik rain.to_numpy() als je een NumPy-array nodig hebt. Het oudere .values geeft bij verschillende datatypes verschillende soorten arrays terug; tekstgegevens kunnen een pandas-array opleveren.

Een datatype vertelt pandas welk soort waarden het opslaat. Veelvoorkomende types zijn int64 voor gehele getallen, float64 voor decimale getallen, bool voor True/False, str voor tekst en datetime64 voor datums en tijden. pandas 3 leidt voor tekst str af; oudere voorbeelden tonen vaak object.

Werk op de hele Series

Voor s = pd.Series([10, 20, 30], index=["a", "b", "c"]) levert s * 2 de waarden 20, 40 en 60 op. s > 15 levert False, True en True op. Beide behouden de labels. Deze bewerkingen zijn gevectoriseerd: één expressie werkt op de hele Series zonder Python-lus.

Zoek een label op met s["b"], dat 20 geeft. Zoek een positie op met s.iloc[0], dat 10 geeft. De expressie "b" in s controleert de index; 20 in s is False. Zelfs een geheel getal tussen vierkante haken is een label: met index [2, 0, 1] betekent s[0] label 0, niet het eerste element. Bij tekstlabels geeft s[0] in pandas 3 een KeyError.

Koppel labels bij berekeningen
a = pd.Series([1, 2, 3], index=["x", "y", "z"])
b = pd.Series([10, 20, 30], index=["y", "z", "w"])
a + b

Het gemeenschappelijke label y combineert 2 en 10 tot 12.0; z combineert 3 en 20 tot 23.0. De labels w en x komen in slechts één invoer voor en krijgen daarom NaN. Het resultaat bevat alle vier de labels. Optellen op zichtbare rijpositie zou ten onrechte 11, 22 en 33 geven.

Gebruik a.add(b, fill_value=0) als een ontbrekende waarde als nul moet tellen. De resultaten zijn w 30.0, x 1.0, y 12.0 en z 23.0. Verwante methoden zijn sub, mul en div.

Herken ontbrekende waarden

Een ontbrekend drijvendekommagetal of een ontbrekende str-waarde gebruikt NaN; een ontbrekende datum- en tijdwaarde gebruikt NaT; een ontbrekend geheel getal in een type met ondersteuning voor ontbrekende waarden gebruikt <NA>. pd.Series([1, None, 3]) wordt float64 en toont 1.0, NaN en 3.0, omdat het gewone int64 geen NaN kan bevatten.

Belangrijkste punten

  • Een Series combineert één reeks waarden met een index, een datatype en een optionele naam.
  • Gebruik een label om op te zoeken en iloc voor een positie; tests op voorkomen controleren labels.
  • Gevectoriseerde berekeningen werken op elke waarde en behouden de index.
  • Twee Series worden uitgelijnd op label; labels zonder overeenkomst krijgen ontbrekende resultaten tenzij een opvulwaarde is opgegeven.
  • Markeringen voor ontbrekende waarden hangen af van het datatype: NaN, NaT of <NA>.

1.2 Maak een DataFrame en doorgrond de structuur

Een DataFrame is een tweedimensionale tabel. Elke rij legt één waarneming vast, zoals een bestelling; elke kolom bevat één variabele, zoals een hoeveelheid. Kolommen kunnen verschillende datatypes hebben, maar ze delen dezelfde rijindex.

Maak een tabel uit Python-gegevens
df = pd.DataFrame({
    "product": ["Notebook", "Desk lamp", "Pen set", "Mug"],
    "quantity": [3, 1, 2, 4],
    "unit_price": [2.50, 18.00, 4.75, 6.00]
})

Elke sleutel in de dictionary wordt een kolomnaam; elke lijst levert de waarden voor die kolom. De lijsten moeten even lang zijn, zodat elke rij in elke kolom een plaats heeft. Hier zijn de indexlabels 0 tot en met 3. Lijsten met verschillende lengtes geven een ValueError.

Een lijst met dictionaries levert daarentegen één dictionary per rij. pd.DataFrame([{"a": 1, "b": 2}, {"a": 3, "c": 4}]) maakt de kolommen a, b en c. De ontbrekende b in de tweede rij en de ontbrekende c in de eerste worden NaN, dus die kolommen gebruiken float64. Een tweedimensionale NumPy-array kan ook waarden leveren, waarbij columns=[...] de kolommen namen geeft.

Lees de afmetingen van de tabel uit

df.shape is (4, 3): vier rijen en drie kolommen, in die volgorde. len(df) is 4, terwijl df.size 12 is omdat het cellen telt. df.index bevat rijlabels, df.columns bevat kolomlabels en df.dtypes geeft één datatype per kolom. Dit zijn attributen: df.shape() probeert een tuple aan te roepen en geeft een TypeError. df.T verwisselt rijen en kolommen.

Behoud een Series of een tabel
SelectieResultaat
df["quantity"]Een Series
df[["quantity"]]Een DataFrame met één kolom
df[["product", "unit_price"]]Een DataFrame met twee kolommen in die volgorde

De binnenste lijst vraagt een verzameling kolommen op. Zonder die lijst geeft df["product", "unit_price"] één tuple als sleutel door. Die komt niet overeen met een van de gewone kolomnamen en geeft een KeyError.

Vierkante haken werken ook als namen spaties bevatten of samenvallen met methoden. Puntnotatie zoals df.quantity werkt alleen voor geschikte namen. Een kolom met de naam size heeft df["size"] nodig, omdat df.size het aantal cellen van de tabel betekent. Maak kolommen ook met vierkante haken: df["total"] = 5 voegt een kolom toe, terwijl df.total = 5 dat niet doet.

Kies een as

Voor numbers = pd.DataFrame({"a": [1, 2], "b": [3, 4]}) telt numbers.sum() langs de rijen op en geeft a 3 en b 7. Dit is axis=0, ook "index" genoemd. numbers.sum(axis=1) telt over elke rij op en geeft 4 en 6; deze as heet ook "columns". Bepaal eerst welk resultaat je nodig hebt: één totaal per kolom of één totaal per rij.

Als je één rij neemt, ontstaat een Series met de kolomnamen als labels. Die Series heeft één datatype nodig dat elke cel in de rij kan bevatten. Een rij met gehele getallen en drijvendekommagetallen wordt float64; een rij met tekst en getallen wordt object. De oorspronkelijke kolommen behouden hun afzonderlijke datatypes.

Belangrijkste punten

  • Een DataFrame heeft een gedeelde rijindex en één datatype per kolom.
  • Lijsten van gelijke lengte leveren kolommen; een lijst met dictionaries levert rijen.
  • shape telt rijen en kolommen; size telt cellen.
  • Eén kolomnaam geeft een Series terug; een lijst met namen geeft een DataFrame terug.
  • axis=0 reduceert langs de rijen; axis=1 reduceert langs de kolommen.
  • Gebruik vierkante haken voor kolomnamen die samenvallen met attributen of methoden.

1.3 Stel labels in, stel ze opnieuw in, hernoem ze en verwijder ze

Rijlabels kunnen betekenis hebben, zoals een bestelnummer, of gewoon de huidige rijen aanduiden. Een bruikbare index maakt zoekopdrachten en latere resultaten gemakkelijker te interpreteren. Labels wijzigen geeft een nieuwe tabel terug, dus bewaar het resultaat met een toewijzing.

Verplaats een ID naar de index
orders = pd.DataFrame({
    "order_id": [1001, 1002, 1003],
    "product": ["Notebook", "Desk lamp", "Pen set"],
    "unit_price": [2.50, 18.00, 4.75]
})
orders_by_id = orders.set_index("order_id")

De oorspronkelijke tabel heeft standaard een RangeIndex: 0, 1 en 2. De nieuwe tabel heeft de labels 1001, 1002 en 1003. order_id is vanuit de kolommen naar de index verplaatst. orders_by_id.loc[1002] identificeert nu de rij met Desk lamp via de ID.

Als je orders.set_index("order_id") aanroept zonder het resultaat op te slaan, blijft orders ongewijzigd. Door opnieuw toe te wijzen, zoals in orders = orders.set_index("order_id"), bewaar je de nieuwe structuur. In pandas 3.1 is inplace= verouderd voor deze methoden die labels wijzigen en voor sorteren; gebruik een toewijzing.

Verplaats labels terug naar een kolom

orders_by_id.reset_index() herstelt order_id als gewone kolom en geeft een nieuwe RangeIndex. Een index zonder naam wordt een kolom met de naam index. Zo blijft de oude identiteit van de rij behouden.

reset_index(drop=True) verwijdert de oude labels. Voor een index [10, 20, 30] bewaart het gewone reset_index() die getallen in een kolom index; reset_index(drop=True) laat ze vervallen en gebruikt 0, 1 en 2. Kies na filteren of sorteren of de oude labels nuttig zijn voordat je ze verwijdert. De index opnieuw nummeren verandert de gegevenswaarden niet en maakt een sortering niet ongedaan.

Hernoem of verwijder labels
renamed = orders.rename(columns={"unit_price": "price"})
short = orders.drop(columns=["product"])
remaining = orders.drop(index=[0, 1])

rename koppelt oude labels aan nieuwe en behoudt namen die niet worden genoemd. Standaard wordt een verkeerd gespelde oude naam genegeerd, dus inspecteer .columns als een hernoeming niets lijkt te hebben gedaan. Om elke kolomnaam te vervangen, wijs je een volledige lijst toe aan orders.columns; de lengte moet overeenkomen met het aantal kolommen.

drop(columns=...) verwijdert kolommen; drop(index=...) verwijdert rijen op label. Een ontbrekend label geeft een KeyError. Na het sorteren is label 0 misschien niet langer de eerste rij: als je het verwijdert, verwijder je nog steeds de rij met label 0.

Selecteer een lijst om de kolomvolgorde te kiezen: orders = orders[["order_id", "unit_price", "product"]]. Kolommen die niet in die lijst staan, worden uit het resultaat verwijderd.

Controleer of een ID werkelijk één rij identificeert

Indexlabels kunnen worden herhaald. Controleer orders_by_id.index.is_unique voordat je ze als unieke ID's behandelt. Als label 1002 twee keer voorkomt, geeft .loc[1002] beide rijen terug als DataFrame. Bij unieke labels geeft dezelfde zoekopdracht met één label een Series terug.

Een betekenisvolle index verbetert ook samenvattingen. In een weertabel met dagen als index geeft weather["temp_c"].idxmax() een dag zoals "Thu"; met een standaardindex geeft de methode een rijnummer.

Belangrijkste punten

  • set_index verplaatst een kolom naar de rijlabels; reset_index verplaatst labels terug naar een kolom.
  • reset_index(drop=True) verwijdert oude labels.
  • Bewaar wijzigingen in labels door de teruggegeven tabel toe te wijzen.
  • rename wijzigt opgegeven labels; drop verwijdert rijen of kolommen op label.
  • Een index kan duplicaten bevatten; controleer de uniciteit voordat je die als ID gebruikt.
2

Lees een CSV-bestand in en controleer de ingelezen gegevens

Een ingelezen tabel moet je controleren voordat de getallen een analyse kunnen onderbouwen. Stem de CSV-opties af op het scheidingsteken, de kopregel en de waardenconventies van het bestand en inspecteer het resultaat op de verwachte rijen, namen en datatypes. Spoor ontbrekende gegevens en herhaalde ID's op en converteer waar nodig numerieke tekst of datumtekst. Kleine keuzes bij het importeren zijn belangrijk: een verloren voorloopnul of een niet-ingelezen datum kan de betekenis van latere code veranderen.

2.1 Lees een CSV-bestand in met read_csv

Een CSV slaat een tabel op als tekst: records staan op regels en een scheidingsteken scheidt de velden. De eerste regel bevat vaak kolomnamen. Om het bestand correct in te lezen, moet je zowel de indeling als de betekenis van de waarden vaststellen.

Lees de besteltabel in
orders = pd.read_csv("orders.csv")

Een relatief pad wordt opgelost vanuit de huidige werkmap van Python. Een verkeerde locatie geeft FileNotFoundError. Je kunt ook een absoluut pad of een URL aan read_csv doorgeven.

De voorbeelden gebruiken dit bestand. De laatste rij heeft een leeg veld voor de hoeveelheid.

order_id,date,product,category,quantity,unit_price
1001,2026-03-02,Notebook,Stationery,3,2.50
1002,2026-03-02,Desk lamp,Home,1,18.00
1003,2026-03-03,Pen set,Stationery,2,4.75
1004,2026-03-04,Mug,Home,4,6.00
1005,2026-03-04,Backpack,Bags,1,35.00
1006,2026-03-05,Notebook,Stationery,,2.50

Met de standaardinstellingen heeft het resultaat vorm (6, 6) en indexlabels 0 tot en met 5. pandas leidt datatypes af: order_id is int64, unit_price is float64 en quantity wordt ook float64 omdat het lege veld NaN wordt. De andere kolommen, waaronder date, zijn str. Een tekenreeks die op een datum lijkt, blijft tekst totdat die als datum wordt ingelezen.

Stem af op de indeling van het bestand
Kenmerk van het bestandInleesoptie
Velden gescheiden door puntkomma'ssep=";"
Decimale komma'sdecimal=","
Geen kopregelheader=None, names=["id", "product"]
Twee extra regels vóór de kopregelskiprows=2
Alleen geselecteerde velden nodigusecols=["product", "quantity"]
Een korte voorvertoningnrows=100

Voor een bestand met de regels a;b, 1,5;2 en 3,0;4 gebruik je pd.read_csv("file.csv", sep=";", decimal=","). Kolom a bevat dan 1.5 en 3.0. Als je de standaardkomma als scheidingsteken gebruikt, krijg je één kolom met de naam a;b, een teken dat je het scheidingsteken moet controleren.

index_col="order_id" maakt die kolom tijdens het inlezen de rijindex. thousands="," leest een veld zoals "1,200" als 1200; in een bestand met komma's als scheidingsteken moet het veld volgens de CSV-regels tussen aanhalingstekens staan, zodat de komma binnen het veld niet als extra scheidingsteken wordt gezien.

Behoud betekenis bij het afleiden van datatypes

Codes zoals "001" zijn identificatiecodes, geen hoeveelheden. dtype={"id": str} behoudt hun voorloopnullen. Als pandas ze eerst naar 1 converteert, kun je door dat getal terug te converteren naar tekst niet meer achterhalen hoeveel nullen het bestand bevatte.

Lege velden en veelvoorkomende markeringen zoals NA, N/A, NULL, NaN en None zijn standaard ontbrekend. Voeg een speciale markering van een bestand toe met na_values=["-"]. Dit zijn inleesregels, dus controleer de conventies van het bestand als een code op een markering voor ontbrekende waarden lijkt.

Gebruik parse_dates=["date"] om de voorbeelddatums als datum- en tijdwaarden in te lezen. In pandas 3 gebruiken deze datums een tijdsresolutie van microseconden, datetime64[us]. UTF-8 is de standaardtekencodering. Bij een UnicodeDecodeError moet je de codering van het bestand controleren en de bijpassende optie opgeven, zoals encoding="latin-1".

Belangrijkste punten

  • read_csv geeft een DataFrame terug en leidt kolomtypes af.
  • Stem sep, decimal en de kopregelopties af op de indeling van het bestand.
  • Behoud voorloopnullen in identificatiecodes door tijdens het inlezen een teksttype te gebruiken.
  • Lege velden en veelvoorkomende markeringen voor ontbrekende waarden worden ontbrekende waarden; na_values voegt markeringen toe.
  • Datums moeten als datums worden ingelezen, met parse_dates tijdens het inlezen of door latere conversie.
  • Een relatief pad wordt opgelost vanuit de huidige werkmap.

2.2 Inspecteer een nieuw DataFrame

Als het inlezen lukt, betekent dit dat pandas het bestand kon verwerken. Het bewijst niet dat de kolommen, datatypes en ontbrekende waarden overeenkomen met wat de tabel moet voorstellen. Inspecteer het nieuwe DataFrame voordat je ermee gaat rekenen.

Controleer zichtbare rijen en afmetingen
orders.head(3)
orders.tail()
orders.shape
orders.columns.tolist()

head() toont standaard vijf rijen; head(3) toont er drie. Met tail() controleer je het einde, waar een export andere records kan bevatten. sample(3, random_state=0) geeft een reproduceerbare aselecte steekproef van drie rijen. In een notebook wordt de laatste expressie van een cel automatisch weergegeven; gebruik elders print.

Het bestelbestand moet zes rijen en zes kolommen bevatten. Een voorvertoning moet kolommen met namen tonen en de eerste bestelling als gegevens. Als het eerste record tussen de kolomnamen verschijnt, heeft het bestand waarschijnlijk geen kopregel en is header=None nodig. Als alles in één brede kolom staat, controleer dan sep.

Kolomnamen moeten exact overeenkomen, inclusief hoofdletters en spaties. orders["Product"] mislukt als de naam product is. Als je de lijst inspecteert, vallen spaties aan het einde gemakkelijker op. orders.columns = orders.columns.str.strip() verwijdert spaties aan de uiteinden van namen in de kopregel.

Lees de structuur met info

orders.info() toont het indexbereik, de naam, het aantal aanwezige waarden en het datatype van elke kolom, en het geheugengebruik. In het voorbeeld met zes rijen heeft quantity vijf aanwezige waarden; de andere kolommen hebben er elk zes. De datatypes zijn twee kolommen met drijvendekommagetallen, één kolom met gehele getallen en drie str-kolommen. orders.dtypes geeft een beknopte lijst met datatypes.

Een kolom die numeriek lijkt maar datatype str heeft, verdient aandacht: een element zoals "unknown", een eenheid zoals "12 kg" of een niet-verwerkt scheidingsteken voor duizendtallen kan verhinderen dat een numeriek datatype wordt afgeleid. Datums blijven ook tekst tenzij ze als datums worden ingelezen. Bepaal het benodigde datatype op basis van de betekenis van de kolom, niet alleen op basis van hoe die er in een voorvertoning uitziet.

Tel ontbrekende en herhaalde waarden
orders.isna().sum()
orders.isna().any(axis=1).sum()
orders.nunique()

isna() maakt een booleaanse tabel: True markeert een ontbrekende cel. Door per kolom op te tellen, tel je die cellen. Quantity heeft één ontbrekende waarde en elke andere kolom nul. Om de betrokken rijen te tellen, controleert .any(axis=1) eerst of elke rij een ontbrekende waarde heeft, waarna .sum() die rijen telt. Als je in plaats daarvan alle kolomaantallen optelt, kun je één rij meerdere keren tellen.

nunique() telt unieke aanwezige waarden: de bestellingen hebben zes ID's, vier datums, vijf producten, drie categorieën, vier hoeveelheden en vijf prijzen. Vergelijk het aantal ID's met het aantal rijen om de uniciteit te controleren, samen met het aantal ontbrekende ID's. orders.duplicated(subset="product") markeert de tweede rij met Notebook, label 5, als herhaling. Een herhaald product is hier toegestaan; een herhaald bestelnummer moet je onderzoeken.

Lees een snel numeriek overzicht

orders.describe() geeft het aantal, gemiddelde, de standaardafwijking, het minimum, de kwartielen en het maximum voor numerieke kolommen. Het aantal van quantity is vijf, dus het gemiddelde vat vijf geregistreerde hoeveelheden samen. Controleer naast datatypes ook aannemelijke bereiken en eenheden: een kolom kan numeriek zijn en toch een invoerfout bevatten. Houd het waargenomen aantal rijen en kolommen, de datatypes, aantallen ontbrekende waarden en de ID-controle bij elkaar wanneer je nieuw ingelezen gegevens beoordeelt.

Belangrijkste punten

  • Gebruik na het inlezen voorvertoningen, afmetingen, exacte kolomnamen en datatypes samen.
  • info() toont aantallen aanwezige waarden en datatypes; de methode geeft geen samenvattingstabel terug.
  • isna().sum() telt ontbrekende cellen per kolom; .any(axis=1).sum() telt de betrokken rijen.
  • Controleer zowel ontbrekende ID's als het aantal unieke ID's.
  • De aantallen van describe() laten zien hoeveel geregistreerde waarden een numerieke samenvatting onderbouwen.

2.3 Converteer kolommen naar de juiste datatypes

Het datatype van een kolom bepaalt welke bewerkingen zinvol zijn. Een tekstkolom met "12" slaat nog steeds tekst op; je kunt daarvan niet zoals bij een numerieke kolom het gemiddelde berekenen. Converteer bewust en wijs het resultaat terug aan de tabel.

Kies strikte conversie of conversie met ontbrekende waarden bij fouten

astype converteert een Series naar een opgegeven type, zoals int, float, str of "Int64". De conversie mislukt wanneer een waarde niet in het gevraagde type kan worden weergegeven.

raw = pd.Series(["12", "7", "n/a", "3.5"])
numeric = pd.to_numeric(raw, errors="coerce")

raw.astype(float) geeft een ValueError bij "n/a". Met errors="coerce" zijn de uitvoerwaarden 12.0, 7.0, NaN en 3.5. Het element dat niet kan worden geconverteerd, wordt ontbrekend in plaats van de conversie te stoppen. Vergelijk raw.isna().sum() met numeric.isna().sum(): nul ontbrekende waarden werden er één, wat een waarde aanwijst die je moet controleren.

Typeconversie met ontbrekende waarden bij fouten is een conversieregel, geen bewijs dat elke nieuwe ontbrekende waarde onschuldig is. Gebruik de aantallen vóór en na de conversie om verlies op te sporen. Sla de conversie op in een nieuwe variabele of kolom als de ruwe tekst nuttig is om een mislukte waarde te achterhalen.

Behoud ontbrekende gehele getallen

De kolom quantity van de bestellingen bevat gehele getallen plus één NaN en is dus float64. Het gewone astype(int) mislukt omdat NaN geen gewone weergave als geheel getal heeft.

orders["quantity"] = orders["quantity"].astype("Int64")

De hoofdletter I is belangrijk: Int64 met ondersteuning voor ontbrekende waarden behoudt de ontbrekende waarde als <NA> en slaat de bekende waarden op als gehele getallen. Deze keuze past bij aantallen met ontbrekende gegevens. Daarmee wordt een hoeveelheid die daadwerkelijk een breuk bevat niet tot een geldig geheel aantal.

Scheidingstekens voor duizendtallen in tekst moet je ook verwerken. pd.Series(["1,200", "950"]).str.replace(",", "").astype(int) geeft 1200 en 950. Als het bestand zelf die conventie gebruikt, kan thousands="," die tijdens het inlezen verwerken.

Converteer datumtekst
orders["date"] = pd.to_datetime(orders["date"])
orders["date"].dt.day_name()

De conversie maakt .dt.year, .dt.month, .dt.day en .dt.day_name() mogelijk. Voor de zes bestellingsdatums zijn de dagnamen Monday, Monday, Tuesday, Wednesday, Wednesday en Thursday. Als je alleen pd.to_datetime(orders["date"]) uitvoert, krijg je een geconverteerde Series, maar blijft de oorspronkelijke kolom tekst. Met de toewijzing bewaar je het resultaat.

Sla herhaalde categorieën op

orders["category"].astype("category") slaat herhaalde labels op via een verzameling toegestane categorieën. Bij grote tabellen bespaart dit meestal geheugen. Wijs het resultaat toe om het te bewaren, net als bij andere conversies.

Het categorische datatype verandert sommige bewerkingen. De categorieën zijn standaard ongeordend, dus min() en max() geven een TypeError. De value_counts() van een categorische kolom vermeldt ook bekende categorieën die in een gefilterde selectie ontbreken, met aantal nul. Het categorische datatype is nuttig voor herhaalde labels, maar verandert zowel het gedrag als de opslag.

Belangrijkste punten

  • astype mislukt bij ongeldige conversies; to_numeric(errors="coerce") zet ongeldige elementen om in ontbrekende waarden.
  • Vergelijk aantallen ontbrekende waarden vóór en na typeconversie met ontbrekende waarden bij fouten.
  • Int64 met ondersteuning voor ontbrekende waarden slaat gehele getallen op met ontbrekende gegevens.
  • Converteer datums met to_datetime en lees datumonderdelen uit via .dt.
  • Bewaar conversies door de resultaten toe te wijzen.
  • Het ongeordende categorische datatype slaat herhaalde labels efficiënt op, maar verandert sommige samenvattingen.
3

Selecteer gegevens op label en op positie

Je kunt een rij identificeren aan de hand van het label of vinden op de huidige positie. Leer die keuze expliciet te maken met loc en iloc, tegelijk de benodigde kolommen te selecteren en te voorspellen of een selectie een waarde, een Series of een DataFrame teruggeeft. Eindpunten van deelbereiken en behouden labels verklaren veel fouten waarbij je er één naast zit. Het onderscheid is vooral nuttig nadat een tabel is gesorteerd of gefilterd.

3.1 Selecteer rijen en kolommen op label met loc

Met labels kun je een rij of kolom op basis van de betekenis opvragen. Met loc identificeert een bestelnummer een rij, ook als de tabel is gesorteerd. De selectie heeft een rijgedeelte gevolgd door een kolomgedeelte: df.loc[rows, columns].

Begin met een betekenisvolle index

Het bestelbestand heeft zes rijen met ID's 1001 tot en met 1006. Maak orders_by_id = orders.set_index("order_id"). De kolommen zijn, in volgorde, date, product, category, quantity en unit_price. De rijlabels zijn bestelnummers, geen posities 0 tot en met 5.

orders_by_id.loc[1003]
orders_by_id.loc[1004, "product"]

De eerste expressie geeft bestelling 1003 terug als Series: date "2026-03-03", product "Pen set", category "Stationery", quantity 2.0 en prijs 4.75. De Series heeft de naam 1003. De tweede geeft één cel terug, "Mug".

Een ontbrekend label geeft een KeyError. orders_by_id.loc[0] mislukt: een eerste rij op positie 0 betekent niet dat er een label 0 bestaat.

Selecteer verzamelingen labels
orders_by_id.loc[[1001, 1005], ["product", "unit_price"]]

Lijsten selecteren labels in de gevraagde volgorde. Dit geeft twee rijen en twee kolommen: Notebook voor 2.5, gevolgd door Backpack voor 35.0. Een lijst behoudt een tabelvormig resultaat, ook als die één label bevat: .loc[[1003]] is een DataFrame met één rij.

OpvraagVorm
Eén waarde.loc[1004, "product"]
Eén volledige rij.loc[1004]
Een tabel met één rij.loc[[1004]]
Alle rijen, één kolom.loc[:, "unit_price"]

Een dubbele punt op zichzelf betekent alle labels langs die as. Als je de kolomselector weglaat, vraag je ook alle kolommen op.

Neem beide grenzen van een deelbereik op labels mee
orders_by_id.loc[1002:1004, "product":"quantity"]

Bij deze geordende index zijn de rijen 1002, 1003 en 1004. Het kolomdeelbereik omvat product, category en quantity. Zowel het eindlabel van de rijen als dat van de kolommen wordt meegenomen, dus de vorm is (3, 3). Als je hier de gebruikelijke Python-regel zou toepassen die het eindpunt uitsluit, zou een bedoelde rij en kolom ontbreken.

Labels blijven behouden bij sorteren

Een standaardindex kan het onderscheid tussen label en positie verhullen. Stel dat het sorteren van scores de rijlabels 3, 0, 2, 1, 4 geeft. .loc[0] selecteert nog steeds label 0, nu de tweede weergegeven rij. .iloc[0] selecteert de bovenste weergegeven rij, label 3. Bij het sorteren beweegt een rij met het label mee; de index wordt niet ongemerkt opnieuw genummerd.

Combineer een voorwaarde met kolomselectie

De rijselector kan een booleaanse Series zijn:

orders.loc[orders["unit_price"] > 5, ["product", "unit_price"]]

Dit behoudt Desk lamp voor 18.0, Mug voor 6.0 en Backpack voor 35.0, en geeft alleen de twee gevraagde kolommen terug. Het masker bepaalt welke rijen voldoen; de kolomlijst bepaalt wat wordt getoond. Met dezelfde vorm voor twee assen kun je cellen voor een wijziging aanwijzen door de selectie links van een toewijzing te zetten.

Belangrijkste punten

  • loc selecteert rijlabels en kolomnamen.
  • Lijsten vragen labels op in de opgegeven volgorde en behouden een DataFrame langs die as.
  • Deelbereiken op basis van labels bevatten het eindlabel; een dubbele punt selecteert alle labels.
  • Ontbrekende opgevraagde labels geven een KeyError.
  • Bij sorteren bewegen labels met de rijen mee, dus label 0 kan verschillen van positie 0.
  • Een booleaans rijmasker en kolomnamen kunnen samen in één aanroep van loc staan.

3.2 Selecteer op positie met iloc en kies de juiste indexeringsmethode

Gebruik iloc als een vraag gaat over de plaats van een rij of kolom: de eerste drie rijen, de laatste kolom of een bepaalde weergegeven cel. De selectors zijn gehele posities, onafhankelijk van de indexlabels.

Tel vanaf nul

orders.iloc[0] selecteert de eerste rij en orders.iloc[-1] de laatste. Een negatieve positie telt terug vanaf het einde. Twee posities selecteren een cel: orders.iloc[2, 2] is "Pen set" in de oorspronkelijke besteltabel, waar product kolompositie 2 heeft.

De geïndexeerde tabel orders_by_id heeft de kolommen date, product, category, quantity en unit_price. Door order_id naar de index te verplaatsen, zijn de kolomposities veranderd, zodat product nu positie 1 heeft. Code op basis van posities hangt af van deze indeling.

Stop vóór het eindpunt van een deelbereik
orders_by_id.iloc[1:3, 0:2]

De geselecteerde rijposities zijn 1 en 2, met bestellingen 1002 en 1003. De kolomposities zijn 0 en 1, date en product. Positie 3 en kolom 2 zijn uitgesloten, wat vorm (2, 2) geeft. Een leeg begin betekent het begin; een leeg eindpunt betekent het einde.

Lijsten vragen bepaalde posities op, ook een combinatie van positieve en negatieve. orders.iloc[[0, -1], [2, 5]] selecteert product en unit_price voor de eerste en laatste bestelling. Beide zijn toevallig Notebook voor 2.5.

Voorspel de vorm van het resultaat
SelectieResultaat
orders.iloc[0, 2]Eén waarde
orders.iloc[0]Een Series voor één rij
orders.iloc[:, 2]Een Series voor één kolom
orders.iloc[[0]]Een DataFrame met één rij
orders.iloc[0:1, 2:3]Een DataFrame met één rij en één kolom

Een scalaire selector selecteert één element langs een as en verwijdert die dimensie. Een deelbereik of lijst behoudt die as, ook als de selectie maar één element bevat. Dit is van belang als de volgende bewerking een tabel verwacht in plaats van een Series.

Verwerk het einde van een tabel

De besteltabel met zes rijen heeft geldige niet-negatieve rijposities 0 tot en met 5. orders.iloc[10] geeft een IndexError. Een deelbereik kan voorbij de tabel lopen: orders.iloc[4:100] geeft gewoon de laatste twee rijen terug. Eén ontbrekende positie is een ongeldige aanvraag voor een element, terwijl een deelbereik een bereik beschrijft dat wordt begrensd tot de beschikbare rijen.

Kies bewust voor labels of posities

Voor één cel gebruikt at labels en iat posities. orders.at[2, "product"] en orders.iat[2, 2] geven beide "Pen set" voordat de rijen anders worden gerangschikt.

Kies loc als je een ID of de betekenis van een kolom kent. Kies iloc als de plaats zelf van belang is. Om de eerste rijen met een kolomnaam te combineren, geeft orders.columns.get_loc("quantity") de positie 4 terug, zodat je orders.iloc[0:3, 4] kunt gebruiken.

Losse vierkante haken kunnen van rol wisselen: orders["product"] selecteert een kolom, maar orders[2:4] selecteert het rijdeelbereik op posities 2 en 3. Met expliciet loc en iloc is die keuze gemakkelijker te lezen.

Belangrijkste punten

  • iloc gebruikt gehele posities vanaf nul; negatieve posities tellen vanaf het einde.
  • Deelbereiken op basis van posities sluiten het eindpunt uit en kunnen voorbij de beschikbare rijen lopen.
  • Eén positie buiten het bereik geeft een IndexError.
  • Scalaire selectors verwijderen een dimensie; lijsten en deelbereiken behouden die.
  • at selecteert één cel op label en iat selecteert één cel op positie.
4

Filter rijen op voorwaarden

Met voorwaarden kun je je richten op waarnemingen die een vraag beantwoorden. Maak maskers uit vergelijkingen, combineer ze en gebruik hulpmethoden voor categorieën, bereiken, ontbrekende waarden en tekstpatroonvergelijkingen. Richt daarna een wijziging op de oorspronkelijke tabel met één loc-toewijzing. Filteren en wijzigen gebruiken beide een rijvoorwaarde, maar onder kopiëren bij schrijven in pandas 3 is het essentieel om bij te houden welke tabel wordt gewijzigd.

4.1 Filter met booleaanse maskers

Filteren selecteert waarnemingen die aan een vraag voldoen, zoals welke bestellingen bij Home horen en meer dan 10 per stuk kosten. Maak eerst een booleaans masker, een Series met één True of False per rij. Gebruik dat vervolgens om de overeenkomstige rijen te selecteren.

Maak en gebruik een masker
is_stationery = orders["category"] == "Stationery"
stationery = orders[is_stationery]

Het masker is True, False, True, False, False en True. De selectie behoudt labels 0, 2 en 5, die overeenkomen met bestellingen 1001, 1003 en 1006. Filteren behoudt die labels en nummert ze niet opnieuw. reset_index(drop=True) geeft opeenvolgende labels als dat nodig is.

Vergelijkingsoperatoren zijn onder andere ==, !=, <, <=, > en >=. Tekstvergelijkingen zijn exact: "home" verschilt van "Home" en ook spaties kunnen een overeenkomst verhinderen.

Combineer voorwaarden rij voor rij
is_home = orders["category"] == "Home"
is_expensive = orders["unit_price"] > 10
orders[is_home & is_expensive]

Alleen Desk lamp voldoet: de categorie is Home en de prijs is 18.0. Mug hoort bij Home maar kost 6.0. Backpack kost 35.0 maar hoort bij Bags.

Zet elke vergelijking tussen haakjes als je ze rechtstreeks schrijft:

orders[(orders["category"] == "Home") &
       (orders["unit_price"] > 10)]

Gebruik & voor en, | voor of en ~ voor niet. De haakjes houden elke vergelijking bij elkaar voordat pandas de maskers combineert. Zonder haakjes kunnen de voorrangsregels van Python proberen een tekenreeks en een Series met & te combineren, wat een TypeError geeft.

De Python-operatoren and, or en not verwachten één waarheidswaarde, geen kolom met waarheidswaarden. Als je ze op maskers gebruikt, krijg je een ValueError over een dubbelzinnige waarheidswaarde. Een gewone if orders["quantity"] > 1: heeft hetzelfde probleem. Gebruik .any() om te vragen of een rij voldoet, of .all() om te vragen of elke rij voldoet.

Tel overeenkomsten en aandelen

is_stationery.sum() is 3 omdat True als 1 telt en False als 0. is_stationery.mean() is 0.5, de fractie van de zes bestellingen die overeenkomt. Vermenigvuldig met 100 om dat uit te drukken als 50%.

Verwerk ontbrekende waarden expliciet

Bij de oorspronkelijke float64-kolom quantity geven vergelijkingen met NaN False, behalve !=, dat True geeft. quantity >= 1 behoudt vijf rijen; quantity < 1 behoudt er geen. De lege hoeveelheid zit in geen van beide selecties. Toch neemt quantity != 3 die lege rij mee, dus ongelijk aan betekent niet bekend en verschillend.

Na conversie naar Int64 met ondersteuning voor ontbrekende waarden geeft een vergelijking met <NA> de waarde <NA>, en filteren laat die rijen weg. Gebruik isna() of notna() als de vraag over ontbrekende waarden gaat.

Gebruik orders.loc[is_home, "product"] om zowel kolommen als rijen te selecteren. Dit geeft Desk lamp en Mug terug. Een benoemd masker kun je opnieuw gebruiken om dezelfde verzameling rijen te inspecteren, te tellen en te wijzigen.

Belangrijkste punten

  • Een vergelijking maakt één booleaans resultaat per rij; filteren behoudt rijen met True en bewaart de labels.
  • Combineer maskers met &, | en ~, met haakjes rond vergelijkingen.
  • Gebruik .any() of .all() als één waarheidswaarde nodig is.
  • De som van een booleaans masker telt overeenkomsten en het gemiddelde geeft hun aandeel.
  • Controleer ontbrekende waarden expliciet: float NaN en <NA> in een type met ondersteuning voor ontbrekende waarden gedragen zich anders bij vergelijkingen.
  • Tekstgelijkheid is hoofdlettergevoelig en houdt rekening met spaties.

4.2 Gebruik hulpmethoden en query voor veelgebruikte filters

Sommige filters hebben een vertrouwde vorm: voorkomen in een lijst, een numeriek interval, een ontbrekende waarde of een tekstfragment. Hulpmethoden drukken deze tests rechtstreeks uit en geven nog steeds maskers die je met andere voorwaarden kunt combineren.

Test voorkomen en bereiken
orders[orders["category"].isin(["Home", "Bags"])]
orders[orders["unit_price"].between(4.75, 18)]

isin komt overeen met elke opgegeven waarde. De eerste selectie bevat bestellingen 1002, 1004 en 1005. ~orders["category"].isin(["Home"]) keert de test om en behoudt rijen van Stationery en Bags. Een Python-expressie met in maakt dit masker voor voorkomen niet rij voor rij.

between neemt standaard beide eindpunten mee. De tweede selectie bevat Desk lamp voor 18.0, Pen set voor 4.75 en Mug voor 6.0. Gebruik inclusive="neither" om beide eindpunten uit te sluiten, "left" om alleen het lage eindpunt mee te nemen of "right" om alleen het hoge eindpunt mee te nemen. Kies de regel voor eindpunten op basis van de vraag.

Zoek ontbrekende en aanwezige waarden

orders[orders["quantity"].isna()] behoudt bestelling 1006. notna() doet het omgekeerde en behoudt geregistreerde hoeveelheden. Test geen gelijkheid met np.nan: NaN is zelfs niet gelijk aan zichzelf, dus quantity == np.nan vindt de ontbrekende rij niet.

Zoek binnen tekst
orders[orders["product"].str.contains("note", case=False, na=False)]

str.contains test of elke tekstwaarde een overeenkomst bevat. Door hoofdletters te negeren vind je beide rijen met Notebook. Met na=False telt ontbrekende tekst als geen overeenkomst. De zoekopdracht behandelt het patroon standaard als een reguliere expressie; voor een letterlijk tekstfragment met leestekens voorkomt regex=False dat die leestekens als patroon worden geïnterpreteerd. str.startswith en str.endswith testen het begin en einde.

Schrijf een filter als query
orders.query("quantity >= 2 and unit_price < 5")

Dit behoudt bestellingen 1001 en 1003. Binnen een query-tekenreeks staan kolomnamen voor kolommen en zijn and, or en not toegestaan. De tekenreeks is een pandas-queryexpressie; de syntaxis is niet dezelfde als bij het rechtstreeks combineren van Series in gewone Python.

Een Python-variabele heeft @ nodig:

limit = 5
orders.query("unit_price > @limit")

Het resultaat bevat Desk lamp, Mug en Backpack. Een kolomnaam met een spatie heeft backticks nodig binnen de query, zoals in orders.query("`unit price` > 5").

Je kunt dezelfde vraag schrijven als masker, aanroep van een hulpmethode of query. Kies bij voorkeur de vorm die de regel duidelijk laat zien. Voor een interval brengt between de grenzen en de inclusieregel samen. Voor een verzameling toegestane labels voorkomt isin herhaalde gelijkheidstests. Als een filter zich onverwacht gedraagt, inspecteer dan het masker en de exacte kolomwaarden voordat je de voorwaarde wijzigt.

Belangrijkste punten

  • isin test of waarden voorkomen en ~ keert het masker om.
  • between neemt beide eindpunten mee tenzij inclusive de regel wijzigt.
  • isna en notna sporen ontbrekende en geregistreerde waarden op.
  • str.contains doorzoekt tekst; case=False negeert hoofdletters en na=False sluit ontbrekende tekst uit.
  • Binnen query worden kolommen rechtstreeks benoemd, gebruiken Python-variabelen @ en staan kolomnamen met spaties tussen backticks.

4.3 Wijzig waarden in geselecteerde rijen op een veilige manier

Een wijziging moet gericht zijn op de tabel die je wilt veranderen. In pandas 3 gedraagt een selectie zich onder kopiëren bij schrijven als een afzonderlijk object, dus als je een geselecteerd object wijzigt, verandert de oorspronkelijke tabel niet.

Zet het volledige doel in één loc-toewijzing
sale = orders.copy()
is_home = sale["category"] == "Home"
sale.loc[is_home, "unit_price"] *= 0.9

Het masker selecteert twee rijen van Home. De kolomselector richt zich op hun prijzen. Vermenigvuldiging met 0,9 behoudt 90% van elke prijs en verlaagt 18,00 naar 16,20 en 6,00 naar 5,40. Andere rijen blijven ongewijzigd. De uitgebreide vorm leest rechts dezelfde selectie en wijst links de vermenigvuldigde waarden toe.

Hier is sale een afzonderlijke tabel voor een prijswijziging, zodat orders beschikbaar blijft ter vergelijking. Om de oorspronkelijke tabel bij te werken, zet je orders.loc[...] zelf links van de toewijzing.

Vermijd geketende toekenning
orders[orders["category"] == "Home"]["unit_price"] = 0

Dit gebruikt twee indexeringsstappen. De eerste maakt een geselecteerd object; de tweede wijst toe aan dat object. In pandas 3 werkt dit orders nooit bij, en een waarschuwing ChainedAssignmentError wijst op het probleem. Hetzelfde probleem geldt voor orders["unit_price"][1] = 0.

Gebruik orders.loc[orders["category"] == "Home", "unit_price"] = 0 als je de oorspronkelijke tabel wilt wijzigen. De tabel, overeenkomstige rijen en kolom worden allemaal in één toewijzing opgegeven.

Begrijp geselecteerde tabellen

Na home = orders[orders["category"] == "Home"] verandert een wijziging van home["unit_price"] alleen home. Latere wijzigingen in orders veranderen home evenmin. De objecten kunnen intern opslag delen totdat schrijven nodig is, maar hun zichtbare waarden gedragen zich onafhankelijk.

Oudere pandas-voorbeelden tonen mogelijk SettingWithCopyWarning en gebruiken .copy() na selectie om onzekere wijzigingen te vermijden. pandas 3 heeft die waarschuwing verwijderd en zorgt ervoor dat selecties zich consequent onafhankelijk gedragen. Een expliciete .copy() is nog steeds nuttig om je bedoeling aan te geven, maar een selectie gedraagt zich bij wijzigingen al onafhankelijk.

Koppel de waarden rechts aan het doel

Een scalaire waarde vult alle geselecteerde cellen. Een lijst heeft precies één waarde per geselecteerde rij nodig en vult die in de volgorde van de selectie. Een Series wordt uitgelijnd op indexlabel:

new_prices = pd.Series([16.2, 5.4], index=[1, 3])
sale.loc[is_home, "unit_price"] = new_prices

De Home-rijen hebben labels 1 en 3 en krijgen dus 16.2 en 5.4. Als een geselecteerd label in de Series zou ontbreken, zou de toegewezen waarde NaN zijn; rijen buiten de selectie zouden ongewijzigd blijven. Gelijke lengtes op zichzelf garanderen geen overeenkomst tussen een Series en rijen.

Inspecteer sale.loc[is_home, "unit_price"] na de wijziging en vergelijk het resultaat met orders.loc[is_home, "unit_price"]. De .sum() van het masker is 2, het verwachte aantal rijen waarop deze korting wordt toegepast.

Belangrijkste punten

  • Werk de bedoelde tabel bij met één toewijzing via loc[mask, column].
  • In pandas 3 werkt geketende toekenning de oorspronkelijke tabel nooit bij.
  • Selecties gedragen zich onafhankelijk onder kopiëren bij schrijven.
  • Een scalaire waarde vult de selectie; een lijst volgt de volgorde; een Series wordt uitgelijnd op label.
5

Voeg kolommen toe en transformeer ze

Afgeleide kolommen drukken verbanden uit die al in een tabel aanwezig zijn: hoeveelheid en prijs worden omzet, terwijl een voorwaarde een categorielabel wordt. Gebruik gevectoriseerde berekeningen en kleine transformaties om deze regels duidelijk vast te leggen. Je kiest ook tussen elke waarde aan een andere waarde toewijzen en enkele waarden vervangen, bewaart resultaten door ze toe te wijzen en houdt rekening met ontbrekende invoer en uitlijning op labels wanneer nieuwe waarden in een tabel komen.

5.1 Bereken nieuwe kolommen uit bestaande kolommen

Nieuwe kolommen zetten geregistreerde gegevens om in grootheden die je kunt analyseren. Een berekening tussen kolommen werkt rij voor rij, terwijl de index elk resultaat aan de bijbehorende waarneming gekoppeld houdt.

Bereken omzet
orders["revenue"] = orders["quantity"] * orders["unit_price"]

De zes omzetbedragen zijn 7.5, 18.0, 9.5, 24.0, 35.0 en NaN. Voor de eerste rij geven drie artikelen van 2,50 per stuk samen 7,50. De laatste rij heeft een onbekende hoeveelheid, dus de omzet is ook onbekend. Toewijzen aan een nieuwe naam voegt rechts een kolom toe; toewijzen aan een bestaande naam overschrijft die kolom.

Rekenen met kolommen is gevectoriseerd. Je drukt één regel uit voor de hele kolom en vermijdt een Python-lus over rijen. Bij grote tabellen is dit veel sneller dan for of iterrows, en de expressie maakt het verband tussen de invoerwaarden duidelijk.

Gebruik de geregistreerde waarden in een totaal

orders["revenue"].sum() slaat NaN over en geeft 94.0, het totaal van de vijf bekende omzetbedragen. .mean() geeft 18.8 omdat de noemer bestaat uit vijf geregistreerde omzetbedragen. Als je 94,0 door alle zes rijen zou delen, zou je de ontbrekende omzet ongemerkt behandelen alsof die als een bekende nul bijdroeg.

Om procentuele aandelen te berekenen:

orders["share_pct"] = (
    orders["revenue"] / orders["revenue"].sum() * 100
).round(1)

De aandelen zijn 8.0, 19.1, 10.1, 25.5, 37.2 en NaN. Dit zijn aandelen van het bekende totaal. De ontbrekende waarde blijft bij berekeningen ontbreken.

Geef een tabel terug met assign

assign geeft een nieuw DataFrame met toegevoegde of vervangen kolommen terug en laat de invoer ongewijzigd. Het past goed in een keten:

with_tax = orders.assign(
    tax=lambda d: (d["revenue"] * 0.2).round(2)
)

De lambda leest de tabel op dat punt in de keten. Die geeft belastingwaarden 1.5, 3.6, 1.9, 4.8, 7.0 en NaN. In pandas 3 is pd.col("revenue") * 0.2 een andere manier om in assign naar een kolom te verwijzen.

Decimale berekeningen kunnen kleine binaire drijvendekommafouten laten zien: 9,5 keer 0,2 kan worden opgeslagen als 1.9000000000000001. .round(2) geeft een bruikbare waarde voor presentatie. Vermijd exacte gelijkheidstests op berekende decimale getallen wanneer kleine fouten in de getalrepresentatie mogelijk zijn.

Weet hoe toewijzing rijen koppelt
orders["home_price"] = orders.loc[
    orders["category"] == "Home", "unit_price"
]

De toegewezen Series heeft labels 1 en 3. Die rijen krijgen 18.0 en 6.0; elke andere rij krijgt NaN. Toewijzing van een Series koppelt labels, ook als de lengte verschilt van die van de tabel. Een gewone lijst heeft geen labels en moet precies één waarde per rij bevatten. Een scalaire waarde, zoals in orders["currency"] = "EUR", vult elke rij.

Leid waarden af uit tekst of datums

De accessors .str en .dt bieden ook gevectoriseerde kolombewerkingen. orders["product"].str.upper() geeft namen in hoofdletters en .str.len() geeft de lengtes 8, 9, 7, 3, 8 en 8. Wijs zulke resultaten toe aan een nieuwe kolom als zowel de oorspronkelijke als de afgeleide waarden nuttig zijn.

Belangrijkste punten

  • Als je een kolomexpressie toewijst, sla je één resultaat per rij op.
  • Onbekende invoerwaarden geven meestal onbekende uitkomsten; samenvattingen slaan ontbrekende waarden standaard over.
  • Gevectoriseerde kolombewerkingen vermijden lussen over rijen.
  • assign geeft een nieuw DataFrame terug en kan via een lambda naar kolommen verwijzen.
  • Toewijzing van een Series koppelt labels; toewijzing van een lijst volgt de rijvolgorde en vereist de juiste lengte.
  • Gebruik .str en .dt voor kolommen die zijn afgeleid van tekst en datums.

5.2 Hercodeer en transformeer waarden met np.where, map en apply

Een kolom transformeren kan betekenen dat je een numerieke regel toepast, een label toewijst of bestaande labels omzet. Kies een methode waarvan het gedrag bij de regel past, vooral voor waarden die de regel niet noemt.

Zet een voorwaarde om in labels
orders["price_band"] = np.where(
    orders["unit_price"] >= 5, "high", "low"
)

np.where kiest het tweede argument waar de voorwaarde True is en het derde waar die False is. Voor prijzen 2,50, 18,00, 4,75, 6,00, 35,00 en 2,50 zijn de labels low, high, low, high, high en low. De >= neemt een prijs die precies gelijk is aan 5 mee.

Zet alle waarden om of wijzig er enkele
codes = {"Stationery": "ST", "Home": "HM", "Bags": "BG"}
orders["category_code"] = orders["category"].map(codes)

map met een dictionary geeft ST, HM, ST, HM, BG en ST. Een waarde die niet in de dictionary staat, wordt NaN. Met alleen {"Stationery": "ST"} worden zowel Home als Bags ontbrekend. Gebruik een volledige waardetoewijzing als elke categorie een omgezette code nodig heeft.

replace wijzigt opgegeven waarden en laat niet-opgegeven waarden ongewijzigd. orders["category"].replace({"Bags": "Luggage"}) behoudt Stationery en Home en hernoemt Bags.

Bedoelde wijzigingGeschikte methode
Geef elke bekende categorie een codemap met een dictionary
Hernoem enkele bestaande labelsreplace
Kies tussen twee uitkomsten op basis van een voorwaardenp.where
Pas een eigen functie toe

Een Series kan elke waarde via map of apply aan een functie doorgeven. orders["product"].apply(len) geeft de lengte van elke productnaam terug. Geef len zelf door; len() zou de functie direct zonder waarde aanroepen.

Een lambda kan een kleine regel voor waarden uitdrukken: orders["unit_price"].apply(lambda p: "budget" if p < 5 else "standard"). Dit geeft budget, standard, budget, standard, standard en budget terug.

Voor logica die meerdere cellen in één rij nodig heeft, accepteert apply op een DataFrame axis=1:

orders.apply(
    lambda r: r["quantity"] * r["unit_price"], axis=1
)

De functie leest de hoeveelheid en prijs van elke rij. Voor deze berekening is rechtstreekse vermenigvuldiging van kolommen duidelijker en veel sneller bij een grote tabel. Gebruik gevectoriseerde expressies of np.where wanneer je de berekening daarmee kunt uitdrukken; bewaar rijgewijze functies voor logica die ze nodig heeft.

Gebruik ingebouwde numerieke transformaties

round(n) rondt af op n decimalen, abs() geeft absolute waarden en clip(lower=..., upper=...) begrenst waarden. orders["unit_price"].clip(upper=20) verandert 35.0 in 20.0 en laat de andere vijf prijzen ongewijzigd. De dure rij wordt niet verwijderd.

Deze transformaties geven nieuwe waarden terug. Wijs ze toe aan een nieuwe kolom om de invoer voor controle te bewaren, of overschrijf het origineel als dat de bedoeling is. Inspecteer enkele getransformeerde rijen of voer value_counts() uit om te controleren of nieuwe labels en hun aantallen bij de regel passen.

Belangrijkste punten

  • np.where kiest voor elke voorwaardewaarde een uitkomst voor waar of onwaar.
  • map met een dictionary maakt niet-opgegeven waarden ontbrekend; replace behoudt ze.
  • Geef de functie zelf door aan apply; gebruik axis=1 voor een rijfunctie op een DataFrame.
  • Geef de voorkeur aan gevectoriseerde bewerkingen wanneer je de regel ermee kunt uitdrukken.
  • clip begrenst waarden, terwijl round en abs ze transformeren zonder rijen te selecteren.
6

Sorteer gegevens, ken rangnummers toe en vat gegevens samen

Een geordende tabel en een beknopte statistische samenvatting beantwoorden verschillende vragen over dezelfde waarnemingen. Sorteer records, ken rangnummers toe met een bewuste regel voor gelijke waarden en kies aantallen, centrum- of spreidingsmaten die bij de gegevens passen. Onderzoek vervolgens categorieaandelen en numerieke verbanden. Ontbrekende waarden, de rangschikkingsrichting, steekproefnoemers en de beperkingen van correlatie beïnvloeden allemaal hoe je een resultaat moet interpreteren.

6.1 Sorteer rijen op waarden of op de index

Sorteren verandert de volgorde waarin waarnemingen verschijnen. De waarden van elke rij blijven bij elkaar en het rijlabel beweegt mee. Bepaal wat prioriteit krijgt en hoe gelijke waarden moeten worden geordend voordat je de bovenste of onderste waarden selecteert.

Sorteer één kolom
scores = pd.DataFrame({
    "name": ["Ana", "Ben", "Chen", "Dara", "Eli"],
    "points": [88, 92, 88, 75, 92]
})
ordered = scores.sort_values("points")

Standaard komt de kleinste waarde eerst. Dara's 75 staat vooraan, gevolgd door de twee waarden 88 en daarna de twee waarden 92. Rijlabels bewegen mee met de records. Bij gelijke waarden garandeert het standaardsorteeralgoritme niet dat de oorspronkelijke volgorde behouden blijft; de weergegeven labels kunnen 3, 0, 2, 1, 4 zijn, maar je mag er niet van uitgaan dat rijen met gelijke waarden die volgorde behouden.

Gebruik ascending=False om de grootste waarde eerst te zetten. sort_values geeft een tabel terug en laat scores ongewijzigd tenzij je het resultaat toewijst.

Kies hoe gelijke waarden worden geordend
scores.sort_values(
    ["points", "name"], ascending=[False, True]
)

De eerste sleutel heeft prioriteit. Punten lopen af; namen lopen op binnen gelijke puntenaantallen. De volgorde is Ben, Eli, Ana, Chen en Dara. Eerst op naam sorteren zou een andere vraag beantwoorden, omdat namen dan de primaire sleutel zijn.

Als gelijke waarden bij sorteren op één kolom de invoervolgorde moeten behouden, gebruik je scores.sort_values("points", kind="stable"). Stabiliteit behoudt de bestaande volgorde van rijen met gelijke waarden. Een tweede sleutel geeft gelijke waarden daarentegen een eigen expliciete ordeningsregel.

Plaats ontbrekende waarden en tekst

Ontbrekende waarden komen standaard achteraan, zowel bij oplopend als aflopend sorteren. pd.Series([3.0, np.nan, 1.0]).sort_values() geeft 1.0, 3.0 en daarna NaN. na_position="first" verplaatst de ontbrekende waarde naar het begin; alleen de sorteerrichting omkeren doet dat niet.

Tekst wordt op tekencode gesorteerd. "Zebra" komt vóór "apple" omdat hoofdletters en kleine letters verschillende bereiken innemen. Consistent geschreven namen zoals Bags, Home en Stationery worden in de verwachte alfabetische volgorde gesorteerd.

Sorteer labels of nummer ze opnieuw

sort_index() ordent de rijlabels, niet de gegevenswaarden. Na sorteren op punten kan deze methode de oorspronkelijke volgorde van de standaardlabels herstellen. sort_index(ascending=False) keert de volgorde van de labels om. reset_index(drop=True) laat daarentegen de huidige rijvolgorde staan en vervangt de labels door 0, 1, 2 enzovoort.

Selecteer de grootste of kleinste rijen

scores.nlargest(2, "points") geeft Ben en Eli terug, beiden met 92. nsmallest neemt in plaats daarvan lage waarden. Als de grens binnen een groep gelijke waarden valt, bepaal je of je alle rijen met die waarde wilt behouden. scores.nlargest(1, "points", keep="all") geeft beide waarden 92 terug, ook al is n gelijk aan 1. Het gevraagde aantal is dan een grens, geen belofte over het uiteindelijke aantal rijen.

Belangrijkste punten

  • sort_values ordent rijen op gegevenswaarden; sort_index ordent rijlabels.
  • ascending=False zet grote waarden vooraan, terwijl ontbrekende waarden standaard nog steeds achteraan komen.
  • Meerdere sorteersleutels worden in volgorde van prioriteit toegepast en kunnen verschillende richtingen gebruiken.
  • Gebruik een tweede sleutel of een stabiele sortering op één kolom als de volgorde van gelijke waarden belangrijk is.
  • reset_index(drop=True) nummert de huidige volgorde opnieuw zonder opnieuw te sorteren.
  • keep="all" bij een selectie van de grootste waarden kan meer dan n rijen teruggeven.

6.2 Ken rangnummers toe aan waarden en verwerk gelijke waarden

Een rangnummer legt vast waar een waarde in de gesorteerde volgorde thuishoort zonder de rij te verplaatsen. Dit is nuttig als elke waarneming naast de oorspronkelijke gegevens een plaatsnummer nodig heeft. Gelijke waarden hebben een regel nodig omdat meerdere waarden hetzelfde deel van die volgorde kunnen innemen.

Kies de richting

scores["points"].rank() rangschikt van klein naar groot. Gebruik ascending=False voor een uitslagentabel waarin hoge scores de beste rangnummers moeten krijgen. De methode voor gelijke waarden bepaalt dan welk plaatsnummer elke groep gelijke waarden krijgt.

De voorbeeldscores in rijvolgorde zijn Ana 88, Ben 92, Chen 88, Dara 75 en Eli 92. In aflopende volgorde staan de waarden 92 op plaats 1 en 2, de waarden 88 op plaats 3 en 4, en 75 op plaats 5. De standaard method="average" geeft elke gelijke waarde het gemiddelde van de ingenomen plaatsen. De teruggegeven waarden, in de oorspronkelijke rijvolgorde, zijn 3.5, 1.5, 3.5, 5.0 en 1.5.

Kies een methode voor gelijke waarden
MethodeAflopende rangnummers in oorspronkelijke rijvolgordeRegel voor gelijke waarden
average3.5, 1.5, 3.5, 5.0, 1.5Gemiddelde van ingenomen rangnummers
min3, 1, 3, 5, 1Kleinste ingenomen rangnummer
max4, 2, 4, 5, 2Grootste ingenomen rangnummer
dense2, 1, 2, 3, 1Eén rangnummer per unieke waarde, geen hiaten
first3, 1, 4, 5, 2Afzonderlijke rangnummers op volgorde van voorkomen

Bij min betekenen twee winnaars met rangnummer 1 dat de volgende score begint bij rangnummer 3. Bij dense begint de volgende afwijkende score bij rangnummer 2. first kent verschillende rangnummers toe aan gelijke scores, ook als de scores zelf geen reden geven om de ene persoon boven de andere te verkiezen; de methode volgt de invoervolgorde.

Rangnummers worden als drijvendekommagetallen teruggegeven, waardoor waarden zoals 1.5 mogelijk zijn. Als een gekozen methode voor gelijke waarden hele rangnummers geeft en er geen ontbreken, converteert .astype(int) ze voor weergave. Een gewoon geheelgetaltype kan geen ontbrekend rangnummer bevatten.

Druk rangnummers uit als fracties

Bij de standaardmethode met het gemiddelde en aanwezige waarden deelt rank(pct=True) elk rangnummer door het aantal gerangschikte waarden. Als je de vijf voorbeeldscores oplopend rangschikt, krijg je 2.5, 4.5, 2.5, 1.0 en 4.5. Delen door vijf geeft 0.5, 0.9, 0.5, 0.2 en 0.9.

De gelijke hoogste waarden krijgen 0.9, niet 1, omdat hun gemiddelde rangnummer 4.5 is. Een relatief rangnummer beschrijft het rangnummer ten opzichte van de gerangschikte waarden; het is geen percentage van de score zelf.

Verwerk ontbrekende rangnummers en sla resultaten op

Ontbrekende waarden behouden standaard NaN als rangnummer. Bij omzetten 7.5, 18.0, 9.5, 24.0, 35.0 en NaN zijn de aflopende rangnummers 5, 3, 4, 2, 1 en NaN. na_option="bottom" zet de ontbrekende waarde na de geregistreerde waarden en geeft die rangnummer 6.

scores["place"] = scores["points"].rank(
    method="min", ascending=False
)

De rijen blijven Ana, Ben, Chen, Dara en Eli. De nieuwe kolom place legt 3, 1, 3, 5 en 1 vast. Sorteer afzonderlijk als de weergave de winnaars eerst moet tonen.

Belangrijkste punten

  • Rangschikken kent plaatsen toe zonder rijen te verplaatsen; aflopend rangschikken geeft grote waarden lage rangnummers.
  • Methoden voor gelijke waarden bepalen of gedeelde rangnummers hiaten achterlaten of de invoervolgorde volgen.
  • De standaardmethode met het gemiddelde kan gebroken rangnummers teruggeven.
  • Bij de standaardmethode met het gemiddelde deelt pct=True door het aantal gerangschikte waarden.
  • Ontbrekende waarden behouden standaard ontbrekende rangnummers; na_option="bottom" plaatst ze op de laatste plaats.

6.3 Vat kolommen samen met beschrijvende statistiek

Een beschrijvende statistiek vat veel waarnemingen samen in één bruikbare grootheid. Kies een statistiek die bij de vraag past en lees het aantal aanwezige waarden af, zodat je weet op hoeveel gegevens die is gebaseerd.

Bereken centrum en spreiding
weather = pd.DataFrame({
    "temp_c": [14.0, 17.5, 16.0, 21.0, 19.5, 12.5, 15.0],
    "rain_mm": [0.0, 2.4, 0.0, 0.0, 5.1, 12.3, 0.8]
}, index=["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"])

Voor weather["temp_c"] is sum() 115.5, mean() 16.5 en median() 16.0. Het minimum is 12,5 en het maximum 21,0, wat een variatiebreedte van 8,5 °C geeft. idxmax() geeft het label "Thu" terug en idxmin() geeft "Sat" terug: ze identificeren waarnemingen in plaats van de uiterste waarden zelf terug te geven.

std() en var() meten spreiding. pandas gebruikt standaard de steekproefnoemer, ddof=1, en deelt gekwadrateerde afwijkingen door één minder dan het aantal. Hier is de standaardafwijking ongeveer 3,028 °C en de variantie ongeveer 9,167 graden Celsius in het kwadraat. std(ddof=0) gebruikt het aantal zelf en geeft ongeveer 2,803 °C. NumPy's np.std gebruikt standaard ddof=0, dus stem de instelling af voordat je resultaten vergelijkt.

Lees kwartielen en describe

quantile(0.25) geeft het onderste kwartiel, 14.5; quantile(0.5) geeft de mediaan, 16.0; quantile(0.75) geeft het bovenste kwartiel, 18.5. De standaardinterpolatie kan een waarde tussen geregistreerde metingen teruggeven.

weather.describe() combineert het aantal, gemiddelde, de standaardafwijking, het minimum, de drie kwartielen en het maximum voor numerieke kolommen. Neerslag heeft een gemiddelde van ongeveer 2,94 mm en een mediaan van 0,8 mm. De meting van 12,3 mm trekt het gemiddelde omhoog; de mediaan beschrijft een typische dag in deze rechtsscheve week beter.

Houd rekening met ontbrekende waarden en datatypes

Voor pd.Series([1, np.nan, 3]) is .mean() 2.0 omdat ontbrekende waarden standaard worden overgeslagen. .count() is 2, terwijl .size 3 is. Met skipna=False is het gemiddelde NaN. Gebruik het totale aantal rijen niet als noemer voor het standaardgemiddelde wanneer sommige waarden ontbreken.

Tekstsamenvattingen verschillen. orders["category"].describe() geeft count 6, unique 3, top Stationery en freq 3. Het gemiddelde berekenen van de besteltabel met tekst geeft een TypeError; gebruik orders.mean(numeric_only=True) of selecteer numerieke kolommen met select_dtypes("number").

Vat samen langs een as

Standaard reduceren DataFrame-statistieken langs de rijen tot één resultaat per kolom. axis=1 geeft daarentegen één resultaat per rij; selecteer grootheden waarvan de eenheden zinvol kunnen worden gecombineerd.

orders[["quantity", "unit_price"]].agg(["mean", "max"])

agg berekent meerdere benoemde statistieken samen. Quantity heeft gemiddelde 2.2 en maximum 4.0; unit_price heeft gemiddelde ongeveer 11,46 en maximum 35.0. weather["rain_mm"].cumsum() geeft cumulatieve totalen 0.0, 2.4, 2.4, 2.4, 7.5, 19.8 en 20.6 mm, met behoud van één resultaat per dag.

Belangrijkste punten

  • Kies totalen, centrum- of spreidingsmaten die bij de vraag passen.
  • describe verzamelt veelgebruikte numerieke statistieken; tekstkolommen hebben samenvattingen op basis van frequenties.
  • count sluit ontbrekende waarden uit, terwijl size ze meetelt.
  • De standaardafwijking van pandas gebruikt ddof=1; NumPy gebruikt standaard ddof=0.
  • Kwantielen kunnen tussen metingen interpoleren.
  • idxmax en idxmin geven labels terug; cumsum geeft cumulatieve totalen terug.
  • agg vraagt meerdere statistieken op en axis bepaalt de richting van de reductie.

6.4 Tel waarden en meet samenhang

Aantallen beschrijven hoe vaak waarden voorkomen; correlaties beschrijven hoe twee numerieke variabelen samen variëren. Beide samenvattingen moet je interpreteren: wat wordt er geteld, wat ontbreekt en welk verband meet de statistiek?

Tel categorieën of toon unieke waarden

orders["category"].value_counts() geeft Stationery 3, Home 2 en Bags 1, geordend op frequentie. De teruggegeven Series heeft de naam count. Ontbrekende waarden worden standaard uitgesloten; dropna=False neemt ze op als afzonderlijk aantal.

orders["category"].value_counts(normalize=True)

De genormaliseerde Series heeft de naam proportion: Stationery is 0.5, Home ongeveer 0,333 en Bags ongeveer 0,167. Vermenigvuldigen met 100 geeft percentages. Met de standaardregel voor ontbrekende waarden beschrijven deze aandelen de aanwezige waarden.

VraagMethode
Hoe vaak komt elke waarde voor?value_counts()
Welke unieke waarden komen voor?unique()
Hoeveel unieke aanwezige waarden komen voor?nunique()
Welke waarde of waarden komen het vaakst voor?mode()

unique() behoudt de volgorde van eerste voorkomen: Stationery, Home, Bags. mode() geeft een Series terug omdat meerdere waarden dezelfde hoogste frequentie kunnen hebben. Het is geen verzoek om één willekeurig gekozen winnaar.

Voorwaarden kun je rechtstreeks tellen. (weather["rain_mm"] > 0).sum() telt vier regendagen. De .mean() is ongeveer 0,571, dus op ongeveer 57% van de zeven dagen viel regen.

Meet een rechtlijnig verband

weather["temp_c"].corr(weather["rain_mm"]) geeft een Pearsoncorrelatie van ongeveer −0,397. Het negatieve teken geeft aan dat op warmere dagen in deze waarnemingen doorgaans minder regen viel. De grootte beschrijft hoe goed een rechtlijnig patroon past, op een schaal van −1 via 0 tot 1.

Een waarde van 1 betekent een perfect stijgend rechtlijnig verband; −1 betekent een perfect dalend verband. Een waarde dicht bij nul betekent weinig lineaire samenhang. Een kromlijnig verband kan nog steeds sterk zijn, ook als de Pearsoncorrelatie dicht bij nul ligt. Correlatie gaat bovendien over samenhang en bewijst niet dat een verandering van de ene variabele de andere doet veranderen.

Lees een correlatiematrix

weather.corr() geeft alle numerieke paren samen. De matrix is symmetrisch: temperatuur met neerslag heeft dezelfde correlatie als neerslag met temperatuur. Een variërende numerieke kolom heeft correlatie 1 met zichzelf; een constante kolom heeft geen gedefinieerde correlatie en geeft in plaats daarvan NaN.

Voor verbanden die steeds stijgen of dalen zonder een rechte lijn te volgen, berekent method="spearman" de correlatie op basis van rangnummers. De methode verandert welk soort patroon wordt samengevat, dus noem die wanneer je een resultaat rapporteert.

De weerberekening gebruikt slechts zeven metingen. Die beschrijft deze kleine waargenomen week; stevige uitspraken over een breder klimaatpatroon hebben meer bewijs nodig. Een bruikbaar rapport bevat de variabelen, het teken en de grootte van de coëfficiënt, de methode en het aantal waarnemingen.

Belangrijkste punten

  • value_counts geeft frequenties; normalisatie geeft aandelen van de getelde waarden.
  • unique, nunique en mode beantwoorden verschillende vragen over unieke en veelvoorkomende waarden.
  • De som van een voorwaarde telt overeenkomsten en het gemiddelde geeft een aandeel.
  • Pearsoncorrelatie meet lineaire samenhang van −1 tot 1.
  • Een correlatiematrix is symmetrisch; constante kolommen geven ongedefinieerde correlaties.
  • Spearmancorrelatie werkt met rangnummers, en correlatie alleen stelt geen oorzaak vast.

Gegevenstabellen met pandas: voorbeelden

6 Walkthroughs

1

Maak een tabel met betekenisvolle labels

12 stappen
Maak gegevens met labels, voorspel uitlijning en kies een index voor betrouwbare zoekopdrachten.
  1. 1
    IntroductieHoud waarden gekoppeld aan hun betekenis

    Een lijst geeft waarden in een volgorde. pandas voegt labels toe zodat je kunt herkennen wat elke waarde beschrijft, ook nadat rijen bewegen. Begin met één variabele met labels en combineer daarna meerdere variabelen in een tabel.

    De kernvraag is of een bewerking de identiteit van een rij volgt of de huidige positie. Dat onderscheid verklaart zowel berekeningen met Series als de keuze van een bruikbare tabelindex.

  2. 2
    VoorbeeldMaak een Series met neerslag en labels

    Maak drie neerslagmetingen in millimeters:

    rain = pd.Series([4.5, 3.0, 6.2],
        index=["Mon", "Tue", "Wed"], name="rain_mm")
    

    De waarden en labels zijn in volgorde gekoppeld. rain["Tue"] geeft 3.0, terwijl rain.iloc[0] 4.5 geeft. De eerste opvraag noemt een dag; de tweede een positie. .dtype is float64 en .size is 3.

  3. 3
    UitlegPas een regel toe op elke waarde

    Een Series ondersteunt gevectoriseerde bewerkingen: rain * 2 verdubbelt elke meting en behoudt de daglabels. rain > 4 levert True, False en True op, opnieuw met labels per dag.

    Gebruik attributen zoals .index, .name en .dtype zonder haakjes. Als je de waarden als NumPy-array nodig hebt, roep je .to_numpy() aan; .values kan voor sommige datatypes een pandas-array teruggeven.

  4. 4
    VoorbeeldTel op volgens label, niet volgens weergegeven rij

    Laat a de waarden x 1, y 2 en z 3 bevatten, terwijl b y 10, z 20 en w 30 bevat. In a + b wordt y aan y gekoppeld, wat 12.0 geeft, en z aan z, wat 23.0 geeft.

    De labels x en w hebben geen tegenhanger, dus hun resultaten zijn NaN. a.add(b, fill_value=0) geeft in plaats daarvan x 1.0 en w 30.0. Een gedeelde rijpositie koppelt geen elementen met verschillende labels.

  5. 5
    UitdagingVoorspel een uitgelijnde som

    Een Series heeft labels a en b met waarden 4 en 7. Een andere heeft labels b en c met waarden 3 en 9. Wat zijn de aanwezige resultaten van gewone optelling?

    ---reveal---

    Alleen b is in beide invoerwaarden aanwezig. De som is 7 plus 3, wat 10.0 geeft. Labels a en c hebben ontbrekende resultaten. Als je de eerste waarden bij elkaar zou optellen, zou je a ten onrechte aan b koppelen.

  6. 6
    VoorbeeldZet meerdere variabelen in kolommen

    Maak een kleine besteltabel:

    df = pd.DataFrame({"product": ["Notebook", "Mug"],
        "quantity": [3, 4], "unit_price": [2.5, 6.0]})
    

    Elke lijst levert één kolom en moet één waarde per rij hebben. De kolommen delen indexlabels 0 en 1, maar behouden hun eigen datatypes. .shape is (2, 3), terwijl .size 6 is omdat dit elke cel telt.

  7. 7
    KernpuntBehoud de vorm die de volgende stap nodig heeft

    df["quantity"] geeft een Series terug. df[["quantity"]] geeft een DataFrame met één kolom terug omdat de binnenste lijst een verzameling kolommen opvraagt.

    Dit is een verschil in structuur, ook al komen de zichtbare waarden overeen. Vierkante haken voorkomen ook naamconflicten: een kolom met de naam size heeft df["size"] nodig, omdat df.size het aantal cellen van het DataFrame betekent.

  8. 8
    UitdagingKies de richting van een totaal

    Wat geeft een rijgewijze som voor kolommen a [1, 2] en b [3, 4], en met welke as vraag je die op?

    ---reveal---

    Gebruik df.sum(axis=1). De eerste rij geeft 1 plus 3, oftewel 4; de tweede geeft 2 plus 4, oftewel 6. De standaardas werkt langs de rijen en zou in plaats daarvan de kolomtotalen a 3 en b 7 geven.

  9. 9
    VoorbeeldGebruik het bestelnummer als index

    Sla voor een tabel met een kolom order_id by_id = orders.set_index("order_id") op. De bestelnummers worden naar de rijindex verplaatst en verdwijnen uit de gewone kolommen.

    Een zoekopdracht zoals by_id.loc[1004] noemt nu een bestelling in plaats van de huidige plaats. Controleer by_id.index.is_unique voordat je erop vertrouwt dat elk nummer precies één rij identificeert; pandas staat dubbele labels toe.

  10. 10
    TipSla een wijziging van labels op

    rename, drop, set_index en reset_index geven nieuwe tabellen terug. Bewaar het resultaat met een toewijzing, zoals orders = orders.rename(columns={"unit_price": "price"}).

    Zonder toewijzing blijft de oude tabel bestaan. Een verkeerd gespelde oude kolomnaam in rename wordt standaard genegeerd, dus inspecteer .columns als de verwachte nieuwe naam ontbreekt.

  11. 11
    UitdagingHerstel ID's zonder ze te verliezen

    Een tabel gebruikt bestelnummers als index. Je hebt een standaardrijindex nodig en wilt de ID's ook als gegevens behouden. Welke bewerking moet je opslaan?

    ---reveal---

    Sla df = df.reset_index() op. Dit behoudt de oude index als kolom en geeft de labels 0, 1, 2 enzovoort. Met drop=True zou je die ID's juist verwijderen. De rijvolgorde blijft hetzelfde.

  12. 12
    SamenvattingVoorspel identiteit, type en vorm

    Controleer drie dingen voordat je een resultaat leest: welke labels de waarden identificeren, welk datatype ze opslaat en hoeveel assen de selectie behoudt.

    Berekeningen met Series volgen labels. Een DataFrame ordent variabelen in kolommen met een datatype. Door de index te wijzigen kan een betekenisvolle ID latere zoekopdrachten ondersteunen, mits je de teruggegeven tabel opslaat en de labels rijen uniek identificeren.

2

Lees een CSV-bestand in en controleer de betekenis

13 stappen
Lees een bestand in, spoor structurele problemen op en behoud bruikbare numerieke en datumtypes.

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

  1. 1
    IntroductieBehandel inlezen als een controleerbare stap
  2. 2
    UitlegLees records in een tabel in
  3. 3
    VoorbeeldStem scheidingstekens en decimaaltekens af
  4. 4
    TipBehoud codes tijdens het inlezen
  5. 5
    UitdagingBehoud het eerste record
  6. 6
    VoorbeeldControleer de zichtbare indeling
  7. 7
    UitlegTel wat aanwezig is en ontbreekt
  8. 8
    UitdagingControleer een ID en een meting
  9. 9
    VoorbeeldConverteer numerieke tekst en spoor een fout op
  10. 10
    KernpuntBewaar aantallen met ontbrekende waarden als gehele getallen
  11. 11
    VoorbeeldMaak datumbewerkingen beschikbaar
  12. 12
    UitdagingHerstel een numerieke import
  13. 13
    SamenvattingVerbind indeling, datatypes en aantallen
3

Kies rijen op identiteit of plaats

10 stappen
Vergelijk loc en iloc, voorspel eindpunten van deelbereiken en behoud de resultaatvorm die je nodig hebt.

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

  1. 1
    IntroductieVraag of identiteit of plaats van belang is
  2. 2
    VoorbeeldLees een bekende bestelling
  3. 3
    VoorbeeldLees een labelbereik inclusief eindpunten
  4. 4
    UitdagingBehoud een tabel met één rij
  5. 5
    VoorbeeldLees een bereik op basis van posities
  6. 6
    TipLees terug vanaf en voorbij het einde
  7. 7
    UitdagingVoorspel het verschil tussen één rij en één waarde
  8. 8
    VerbandGebruik een korte vorm voor één cel
  9. 9
    UitdagingVolg een rij tijdens het sorteren
  10. 10
    SamenvattingGeef zowel de selector als de vorm aan
4

Filter records en werk de juiste tabel bij

13 stappen
Maak een voorwaarde, combineer tests en voer een gerichte wijziging uit onder kopiëren bij schrijven.

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

  1. 1
    IntroductieZet een gegevensvraag om in een rijtest
  2. 2
    VoorbeeldMaak een booleaans masker
  3. 3
    UitlegVereis beide voorwaarden
  4. 4
    TipGebruik alleen één waarheidswaarde als dat nodig is
  5. 5
    UitdagingTel een gecombineerde voorwaarde
  6. 6
    VoorbeeldDruk een bereik rechtstreeks uit
  7. 7
    KernpuntZoek ontbrekende waarden met een test
  8. 8
    UitdagingZet een filter om naar query
  9. 9
    VoorbeeldGeef precies de prijzen van Home korting
  10. 10
    UitlegZie waarom een keten het oorspronkelijke object mist
  11. 11
    TipKoppel wijzigingswaarden op label
  12. 12
    UitdagingCombineer filteren en wijzigen
  13. 13
    SamenvattingMaak voorwaarden en doelen expliciet
5

Zet bestaande kolommen om in bruikbare nieuwe gegevens

12 stappen
Bereken omzet, behoud ontbrekende waarden en kies geschikte methoden voor waardetoewijzing en transformatie.

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

  1. 1
    IntroductieDruk één regel uit voor elke kolom
  2. 2
    VoorbeeldBereken één omzetbedrag per bestelling
  3. 3
    KernpuntLees de noemer achter een gemiddelde
  4. 4
    VoorbeeldVoeg een kolom toe binnen een keten
  5. 5
    UitdagingPlaats een binnenkomende Series
  6. 6
    VoorbeeldKies labels op basis van een drempelwaarde
  7. 7
    UitlegBepaal wat niet-opgegeven waarden betekenen
  8. 8
    UitdagingKies een methode voor gedeeltelijke hercodering
  9. 9
    TipGeef functies door zonder ze aan te roepen
  10. 10
    VoorbeeldBegrens waarden zonder records te verwijderen
  11. 11
    UitdagingVolg een berekende en gehercodeerde kolom
  12. 12
    SamenvattingControleer de regel en invoer zonder overeenkomst
6

Orden gegevens en interpreteer hun samenvattingen

18 stappen
Volg regels voor sorteren en rangschikken en bereken en interpreteer daarna numerieke en categorische samenvattingen.

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

  1. 1
    IntroductieKies de weergave die de vraag beantwoordt
  2. 2
    VoorbeeldSorteer eerst op punten en dan op namen
  3. 3
    TipBehoud alle gelijke waarden op de grens
  4. 4
    UitdagingOnderscheid labelvolgorde van waardevolgorde
  5. 5
    VoorbeeldBereken het gemiddelde van plaatsen bij gelijke waarden
  6. 6
    UitlegKies hiaten of opeenvolgende groepen
  7. 7
    UitdagingLees een relatief rangnummer
  8. 8
    VoorbeeldMaak een weersamenvatting
  9. 9
    UitlegStem de noemer voor spreiding af
  10. 10
    VoorbeeldLees kwartielen en een scheefgetrokken gemiddelde
  11. 11
    UitdagingControleer een gemiddelde aan de hand van het aantal
  12. 12
    VoorbeeldTel categorieën en aandelen
  13. 13
    KernpuntOnderscheid drie vragen over waarden
  14. 14
    UitdagingTel een voorwaarde als fractie
  15. 15
    UitlegBeschrijf samenhang precies
  16. 16
    UitdagingLees een matrix na controle van de gegevens
  17. 17
    UitdagingKies en rapporteer een samenvatting
  18. 18
    SamenvattingHoud de regel van elke samenvatting zichtbaar

Gegevenstabellen met pandas: oefenvragen

50 Oefenvragen in 5 sets

Set 1: Lees en gebruik een pandas-tabel10 Oefenvragen

Vraag 1 van 10

s = pd.Series([8, 13, 5], index=[2, 0, 1]). Wat geeft s[0] terug?
  1. 8
  2. 13
  3. 5
  4. 0
Toon antwoordVerberg antwoord
Antwoord: B
De gehele sleutel 0 selecteert indexlabel 0, met waarde 13. De eerste weergegeven waarde is 8, maar die staat op positie 0 en heeft label 2. Gebruik s.iloc[0] om de eerste waarde op positie op te vragen; gehele sleutels tussen vierkante haken blijven labels.

Vraag 2 van 10

Een kolom bevat [4.0, NaN, 9.0] en stelt gehele aantallen artikelen voor. Welk datatype kan de ontbrekende waarde behouden en bekende aantallen als gehele getallen opslaan?
  1. int
  2. "bool"
  3. "str"
  4. "Int64"
Toon antwoordVerberg antwoord
Antwoord: D
Int64 met ondersteuning voor ontbrekende waarden en een hoofdletter I slaat gehele getallen op en geeft de ontbrekende waarde weer als <NA>. Het gewone int64 heeft geen markering voor ontbrekende waarden en kan deze NaN niet omzetten. Tekst zou een weergave van de waarden behouden, maar geen numerieke gehele aantallen opslaan.

Vraag 3 van 10

Een tabel heeft unieke rijlabels [30, 10, 20]. Welke rij selecteert df.loc[10]?
  1. De rij met label 10, nu de tweede.
  2. De eerste rij, op positie nul.
  3. De laatste rij, op positie twee.
  4. De tiende rij, als die bestaat.
Toon antwoordVerberg antwoord
Antwoord: A
loc interpreteert 10 als indexlabel en selecteert dus de tweede weergegeven rij. De methode telt niet tien posities vooruit. De plaats van de rij kan na sorteren veranderen, maar het label blijft hetzelfde totdat de index expliciet wordt gewijzigd.

Vraag 4 van 10

df heeft categoriewaarden ["A", "B", "A", "B"] en massa's [3, 7, 9, 4]. Welke labels voldoen aan (df["category"] == "A") | (df["mass_kg"] > 6) bij de standaardindex?
  1. Alleen label 2.
  2. Alleen labels 0 en 2.
  3. Labels 0, 1 en 2.
  4. Alleen labels 1 en 2.
Toon antwoordVerberg antwoord
Antwoord: C
Het OF-masker behoudt rijen die aan minstens één van de voorwaarden voldoen. Rijen 0 en 2 zijn categorie A en rijen 1 en 2 zijn zwaarder dan 6 kg, dus hun vereniging is 0, 1 en 2. Om alleen label 2 te behouden, zou aan beide voorwaarden moeten worden voldaan en gebruik je & in plaats van |.

Vraag 5 van 10

Hoeveelheden zijn [2.0, 5.0, NaN] en eenheidsprijzen [7.0, 3.0, 9.0]. Wat is het standaardgemiddelde van hun rijgewijze producten?
  1. Ongeveer 9.67
  2. 14.5
  3. 29.0
  4. NaN
Toon antwoordVerberg antwoord
Antwoord: B
De producten zijn 14, 15 en NaN. Het standaardgemiddelde slaat het ontbrekende resultaat over, dus 29 wordt door twee gedeeld en geeft 14,5. Delen door alle drie de rijen geeft ongeveer 9,67 en zou een onbekende omzet behandelen alsof de bijdrage een geregistreerde nul was.

Vraag 6 van 10

Een numerieke kolom bevat [5.0, NaN, 2.0]. Waar verschijnt NaN bij een standaard aflopende sortering op waarde?
  1. Vóór beide numerieke waarden.
  2. Tussen de twee numerieke waarden.
  3. Na beide numerieke waarden.
  4. Op dezelfde positie als voorheen.
Toon antwoordVerberg antwoord
Antwoord: C
Ontbrekende waarden komen standaard achteraan, ook als waarden aflopend worden gesorteerd. De volgorde is 5, 2 en dan NaN. Als je de sorteerrichting omkeert, verandert de numerieke volgorde, maar verplaatsen ontbrekende waarden niet naar voren; daarvoor is na_position="first" nodig.

Vraag 7 van 10

a = pd.Series([6, 9], index=["east", "west"]) en b = pd.Series([4, 7], index=["west", "east"]). Wat zijn (a + b).loc["east"] en (a + b).loc["west"]?
  1. 13 en 13
  2. 10 en 16
  3. 6 en 9
  4. 7 en 4
Toon antwoordVerberg antwoord
Antwoord: A
Berekeningen met Series koppelen indexlabels. East combineert 6 met 7 en west combineert 9 met 4, dus beide sommen zijn 13. Als je de eerst weergegeven elementen zou koppelen, krijg je 10 en 16, maar die elementen horen bij verschillende labels en worden door pandas niet gekoppeld.

Vraag 8 van 10

Twee rijen hebben ontbrekende cellen: één heeft ontbrekende waarden in drie kolommen en de andere in één kolom. Wat geeft df.isna().any(axis=1).sum() terug?
  1. 4
  2. 3
  3. 1
  4. 2
Toon antwoordVerberg antwoord
Antwoord: D
any(axis=1) reduceert elke rij tot één antwoord: of die minstens één ontbrekende waarde bevat. Beide betrokken rijen zijn True, dus de som is 2. De aantallen ontbrekende waarden over alle kolommen optellen zou vier cellen geven, maar deze expressie telt rijen slechts eenmaal.

Vraag 9 van 10

De namen zijn ["Zoe", "Ari", "Bo", "Dee"] met scores [8, 8, 10, 8]. Welke namen verschijnen in volgorde als je aflopend op score en oplopend op naam sorteert en daarna de eerste twee rijen neemt?
  1. Bo, Zoe.
  2. Bo, Ari.
  3. Ari, Bo.
  4. Ari, Dee.
Toon antwoordVerberg antwoord
Antwoord: B
Door de score 10 staat Bo eerst. De drie scores van 8 worden daarna op naam geordend, met Ari vóór Dee en Zoe, dus de tweede geselecteerde rij is Ari. Als Zoe tweede blijft, behoud je de invoervolgorde bij gelijke scores in plaats van de opgegeven tweede sleutel toe te passen.

Vraag 10 van 10

s bevat ["A", "B", "C", "A", "B"]. Wat zijn na s.replace({"C": "B"}) de modus en de relatieve frequentie daarvan?
  1. B en 0,6.
  2. A en 0,4.
  3. B en 0,5.
  4. A en 0,6.
Toon antwoordVerberg antwoord
Antwoord: A
Door C te vervangen door B worden de aantallen A 2 en B 3, dus B is de modus. De relatieve frequentie is drie van de vijf, oftewel 0,6. De noemer blijft vijf omdat replace elke waarneming behoudt; de transformatie verwijdert de oorspronkelijke rij met C niet.
Set 2: Kies de juiste pandas-bewerking10 Oefenvragen

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

Vraag 1 van 10

Een DataFrame heeft 7 rijen en 4 kolommen. Wat is de .size?
  1. 7
  2. 4
  3. 28
  4. 11
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een tabel met 11 rijen heeft een kolom met 8 aanwezige waarden. Hoeveel waarden ontbreken in die kolom?
  1. 3
  2. 8
  3. 11
  4. 19
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

df heeft vijf rijen. Welke rijposities selecteert df.iloc[1:4]?
  1. Posities 1, 2, 3 en 4.
  2. Posities 1, 2 en 3.
  3. Posities 0, 1 en 2.
  4. Posities 2, 3 en 4.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

In pandas 3 wordt chosen = df[df["active"]] gevolgd door chosen["score"] = 0. Wat gebeurt er met df?
  1. Alle scores worden nul.
  2. Alleen actieve scores worden nul.
  3. Alleen inactieve scores worden nul.
  4. De scores blijven ongewijzigd.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Welke labels levert np.where(s >= 6, "large", "small") op voor de waarden [4, 6, 9]?
  1. ["small", "small", "large"]
  2. ["small", "large", "large"]
  3. ["large", "small", "small"]
  4. ["large", "large", "small"]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

De scores [90, 70, 90, 50] worden gerangschikt met method="min", ascending=False. Welke rangnummers ontstaan in de oorspronkelijke rijvolgorde?
  1. [1, 3, 1, 4]
  2. [1, 2, 1, 3]
  3. [1.5, 3, 1.5, 4]
  4. [2, 3, 2, 4]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een bestand met puntkomma's bevat code;mass_kg, gevolgd door 007;1,5 en 012;2,0. Welke manier van inlezen behoudt de codes en maakt een numeriek gemiddelde van de massa mogelijk?
  1. pd.read_csv("loads.csv", sep=";", decimal=".", dtype={"code": str})
  2. pd.read_csv("loads.csv", sep=";", decimal=",", dtype={"code": int})
  3. pd.read_csv("loads.csv", sep=";", decimal=",", dtype={"code": str})
  4. pd.read_csv("loads.csv", sep=",", decimal=",", dtype={"code": str})
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

df heeft index [10, 20, 30] en omzet [12.0, 24.0, 36.0]. Aan een nieuwe kolom wordt df.loc[df["revenue"] > 15, "revenue"] / 2 toegewezen. Wat is de standaardsom van de nieuwe kolom?
  1. 36.0
  2. 18.0
  3. NaN
  4. 30.0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

De waarden [12, 4, 12, 8] worden oplopend gerangschikt met de standaardmethode en pct=True. Welk relatief rangnummer hoort bij elke 12?
  1. 1.0
  2. 0.75
  3. 0.875
  4. 0.5
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

df.index is ["a", "b", "a"]. Wat is het type van df.loc["a"]?
  1. Een DataFrame met twee rijen.
  2. Een Series met alleen de eerste rij.
  3. Een Series met de laatste rij.
  4. Een scalaire waarde die de overeenkomstige rijen telt.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Controleer rijen, datatypes en berekeningen10 Oefenvragen

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

Vraag 1 van 10

df heeft een index zonder naam [40, 60]. Wat doet df.reset_index() met die labels?
  1. Verwijdert ze en behoudt alle andere kolommen.
  2. Behoudt ze als de nieuwe rijlabels.
  3. Gebruikt ze om de eerste kolom te hernoemen.
  4. Behoudt ze in een kolom index.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een bestand heeft geen kopregel en begint met 501,Sensor. Hoe lees je het in met kolommen id en device zonder dat eerste record te verliezen?
  1. pd.read_csv("devices.csv", header=0, names=["id", "device"])
  2. pd.read_csv("devices.csv", header=None, names=["id", "device"])
  3. pd.read_csv("devices.csv", skiprows=1, names=["id", "device"])
  4. pd.read_csv("devices.csv", index_col=0, names=["id", "device"])
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Welke vorm heeft df.loc[12:14, ["mass_kg"]] op een geordende index [11, 12, 13, 14]?
  1. (3, 1)
  2. (2, 1)
  3. (1, 3)
  4. (3,)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

cutoff = 6. Hoe kan query rijen selecteren waarvan mass_kg groter is dan die Python-variabele?
  1. df.query("mass_kg > cutoff")
  2. df.query("@mass_kg > cutoff")
  3. df.query("mass_kg > @cutoff")
  4. df.query("mass_kg > 6@")
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat gebeurt er met 14 in pd.Series([-2, 6, 14]).clip(lower=0, upper=10)?
  1. De waarde wordt 10.
  2. De waarde wordt verwijderd.
  3. De waarde wordt 0.
  4. De waarde blijft 14.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een tekstserie is ["L", "M", "L", None]. Welk aandeel kent value_counts(normalize=True) standaard toe aan L?
  1. 0.5
  2. 0.75
  3. 2.0
  4. Ongeveer 0.667
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

a = pd.Series([5, 8], index=["u", "v"]) en b = pd.Series([2, 4], index=["v", "w"]). Stel c = a.add(b, fill_value=0). Wat is c[c > 4].sum()?
  1. 10.0
  2. 15.0
  3. 19.0
  4. 9.0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Ingelezen gegevens met zes rijen hebben zes unieke aanwezige ID's en vier aanwezige temperatuurmetingen met een totaal van 28 °C. Een rapport zegt dat een ID wordt herhaald en dat het gemiddelde ongeveer 4,67 °C is. Welk gecorrigeerd rapport past bij de gegevens?
  1. Een ID wordt herhaald; twee metingen ontbreken; gemiddelde is 7 °C.
  2. ID's zijn uniek; geen metingen ontbreken; gemiddelde is 4,67 °C.
  3. ID's zijn uniek; twee metingen ontbreken; gemiddelde is 7 °C.
  4. Een ID wordt herhaald; geen metingen ontbreken; gemiddelde is 4,67 °C.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

df heeft index [4, 8, 12] en prijzen als drijvendekommagetallen [10.0, 20.0, 30.0]. Een masker selecteert labels 4 en 12. Wat zijn na df.loc[mask, "price"] = pd.Series([7.0, 9.0], index=[12, 4]) de prijzen in de oorspronkelijke rijvolgorde?
  1. [7.0, 20.0, 9.0]
  2. [9.0, 20.0, 7.0]
  3. [9.0, NaN, 7.0]
  4. [NaN, 20.0, NaN]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

De scores zijn [11, 9, 9, 6]. Wat zijn het aantal rijen en de kleinste score die df.nlargest(2, "score", keep="all") teruggeeft?
  1. 2 rijen; kleinste score 9.
  2. 4 rijen; kleinste score 6.
  3. 1 rij; kleinste score 11.
  4. 3 rijen; kleinste score 9.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Volg meerdere bewerkingen samen10 Oefenvragen

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

Vraag 1 van 10

df = pd.DataFrame({"a": [2, 5], "b": [7, 1]}). Welke waarden geeft df.sum(axis=1) terug in rijvolgorde?
  1. [9, 6]
  2. [7, 8]
  3. [3, 12]
  4. [2, 5, 7, 1]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

s = pd.Series(["8", "bad", "2.5"]). Wat zijn de waarden na pd.to_numeric(s, errors="coerce")?
  1. [8.0, 0.0, 2.5]
  2. [8, "bad", 2.5]
  3. [8.0, NaN, 2.5]
  4. [8, NaN, 2]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een tabel heeft index [7, 2, 9] en x-waarden [4, 12, 8]. Stel d = df.sort_values("x", ascending=False). Wat is d.iloc[:2]["x"].sum() - d.loc[7, "x"]?
  1. 20
  2. 8
  3. 24
  4. 16
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Welke waarden van de massa's [2, 5, 8] voldoen aan .between(2, 8, inclusive="neither")?
  1. Zowel 2 als 5.
  2. Alleen 5.
  3. Zowel 5 als 8.
  4. Alle drie de waarden.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

df heeft index [5, 9, 12], quantity [2, 3, 4] en price [6, 5, 2]. De omzet wordt toegewezen, omzet boven 10 wordt behouden en daarna wordt pd.Series([20.0], index=[9]) toegewezen als adjusted. Wat is de standaardgemiddelde waarde van adjusted?
  1. 10.0
  2. 13.5
  3. 20.0
  4. NaN
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

De metingen zijn [3.0, 7.0, NaN, 8.0]. Wat zijn hun standaardgemiddelde en aantal aanwezige waarden?
  1. 4.5 en 4
  2. 6.0 en 3
  3. 6.0 en 4
  4. 4.5 en 3
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

df = pd.DataFrame({"a": [2, 6], "b": [5, 3]}, index=[8, 4]). Wat zijn na df = df.T de waarden van df.shape en df.loc["b"].sum()?
  1. (2, 2) en 8
  2. (2, 2) en 9
  3. (2, 2) en 7
  4. (4, 1) en 8
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een Series bevat "1,500", "800", "unknown", "200", zonder bestaande ontbrekende waarden. Wat zijn het gemiddelde en het aantal nieuwe ontbrekende waarden nadat je de komma's verwijdert, numerieke typeconversie met ontbrekende waarden bij fouten toepast en het standaardgemiddelde berekent?
  1. 625.0; één nieuwe ontbrekende waarde.
  2. Ongeveer 833.33; geen nieuwe ontbrekende waarden.
  3. 625.0; geen nieuwe ontbrekende waarden.
  4. Ongeveer 833.33; één nieuwe ontbrekende waarde.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een float64-Series bevat [2.0, NaN, 8.0, 5.0]. Wat is de som van de waarden die s.notna() & (s != 5) & (s < 8) selecteert?
  1. 10.0
  2. 7.0
  3. 2.0
  4. NaN
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

De metingen zijn [1, 2, 3, 4, 40] mm. Het gemiddelde is 10 mm en de mediaan is 3 mm. Waarom beschrijft de mediaan hier een typische meting beter?
  1. De mediaan telt de vijf metingen op vóór het delen.
  2. Het gemiddelde geeft elke meting een ander gewicht.
  3. De mediaan is altijd gelijk aan de kleinste meting.
  4. De hoge meting van 40 mm trekt het gemiddelde omhoog.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Los problemen met uitlijning en samenvattingen op10 Oefenvragen

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

Vraag 1 van 10

Een tabel met unieke ID's 81 en 82 als index is opgeslagen als df. De volgende regel is df.reset_index(). Waarom mislukt df.loc[0] nog steeds?
  1. Het opnieuw instellen behield 81 als eerste label.
  2. De nieuwe index begint op positie 1.
  3. De teruggegeven tabel is niet toegewezen.
  4. De ID-kolom verhindert zoeken op label.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een bestand gebruikt puntkomma's tussen velden en decimale punten in getallen. Welke optie wijzigt het veldscheidingsteken?
  1. decimal=";"
  2. sep=";"
  3. header=";"
  4. index_col=";"
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een tabel met vier rijen heeft labels [8, 3, 6, 1]. Welke labels blijven over in df.iloc[-2:][["x"]]?
  1. 8 en 3.
  2. 3 en 6.
  3. 1 en 6.
  4. 6 en 1.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

df heeft index ["k", "m", "p"], a [4, 8, 12] en b [3, 1, 5]. Stel d = df.loc[(df["a"] >= 8) & (df["b"] < 4), ["a", "b"]]. Wat is d.sum(axis=1).iloc[0]?
  1. 9
  2. 7
  3. 17
  4. 24
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Apparaatnamen zijn ["Probe A", "sensor", None, "PROBE B"]. Welke standaardrijlabels voldoen aan .str.contains("probe", case=False, na=False)?
  1. 0 en 3.
  2. Alleen label 0.
  3. 0, 2 en 3.
  4. Alleen label 3.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

df heeft standaardlabels en prijzen als drijvendekommagetallen [8.0, 12.0, 18.0]. Eerst is er mask = df["price"] >= 12, daarna df.loc[mask, "price"] = pd.Series([9.0], index=[2]). Wat geeft df["price"].count() terug?
  1. 3
  2. 2
  3. 1
  4. 0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een tabel heeft de standaardindex en scores [60, 90, 90, 75] in rijvolgorde. Aflopende rangnummers zonder hiaten worden toegewezen als place, waarna de tabel stabiel en oplopend op place wordt gesorteerd. Welke oorspronkelijke rijlabels verschijnen als eerste?
  1. 0 en 3.
  2. 2 en 1.
  3. 1 en 3.
  4. 1 en 2.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

s = pd.Series(["X", "Y", "X", "Z"]). Wat zijn na t = s.map({"X": 4, "Y": 10}) de waarden van t.count() en t.mean()?
  1. 4 en 4.5
  2. 3 en 4.5
  3. 3 en 6.0
  4. 4 en 6.0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een pandas-Series s bevat [2.0, 4.0, 6.0]. Wat zijn s.std() en np.std(s.to_numpy()), afgerond op drie decimalen?
  1. 1.633 en 2.000
  2. 4.000 en 2.667
  3. 2.000 en 2.000
  4. 2.000 en 1.633
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

df heeft x [1, 2, 3, 4], y [100, 6, 4, 2] en z [5, 5, 5, 5]. Welke waarden verschijnen na df.loc[df["x"] > 1, ["x", "y", "z"]].corr() voor x met y en voor z met zichzelf?
  1. 1.0 en NaN
  2. -1.0 en 1.0
  3. -1.0 en NaN
  4. -1.0 en 0.0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

91 Kernbegrippen, elk met een definitie

A

aantal aanwezige waarden
Het aantal aanwezige waarden is het aantal niet-ontbrekende elementen in een kolom, dat je met het aantal rijen kunt vergelijken om ontbrekende waarden te vinden.
Vijf aanwezige hoeveelheden bij zes bestellingen betekenen dat één bestelling geen geregistreerde hoeveelheid heeft.
aantal unieke waarden
Het aantal unieke waarden is het aantal verschillende aanwezige waarden in een kolom, dat nunique met de standaardinstellingen teruggeeft.
Zes unieke geregistreerde ID's in zes rijen geven aan dat de ID-kolom geen herhaalde waarden heeft.
afgeleide kolom
Een afgeleide kolom slaat waarden op die uit bestaande gegevens zijn berekend, zoals een rijgewijze berekening tussen twee numerieke kolommen.
Quantity vermenigvuldigen met unit_price maakt revenue en houdt elk resultaat bij de bestelling.
aggregatie
Een aggregatie reduceert een verzameling waarden tot samenvattende resultaten; met agg kun je meerdere statistieken tegelijk opvragen.
agg(["mean", "max"]) geeft twee verschillende samenvattingen voor elke geselecteerde numerieke kolom.
as
Een as is een richting in een pandas-tabel: as 0 loopt langs rijen en as 1 langs kolommen voor rijgewijze reducties.
df.sum(axis=1) telt de geselecteerde numerieke kolommen binnen elke rij op en geeft één totaal per rij.
aselecte steekproef
Een aselecte steekproef is een selectie die volgens een willekeurige procedure is gemaakt; een vaste random_state maakt de keuze op dezelfde gegevens reproduceerbaar.
sample(3, random_state=0) is nuttig om rijen buiten het begin of einde van een tabel te controleren.
assign
De methode assign geeft een DataFrame met nieuwe of vervangen kolommen terug en laat de invoertabel ongewijzigd.
Een lambda in assign kan in dat stadium van een methodeketen een belastingkolom uit revenue berekenen.
at
De indexeringsmethode at selecteert één cel op rij- en kolomlabel en biedt een beknopte vorm om een scalaire waarde op label op te zoeken.
orders.at[2, "product"] leest het product op label 2 in een besteltabel met standaardindex.
automatische typeafleiding
Automatische typeafleiding is de keuze van pandas voor een kolomdatatype op basis van de invoerwaarden als geen expliciet datatype is opgegeven.
Numerieke typeafleiding kan de identificatiecode "001" omzetten in 1 tenzij het datatype als tekst is opgegeven.

B

begrenzen
Begrenzen beperkt waarden tot opgegeven onder- of bovengrenzen en behoudt elke waarneming in plaats van rijen buiten het bereik te verwijderen.
Eenheidsprijzen begrenzen op 20 verandert een waarde van 35 in 20 met behoud van hetzelfde bestelrecord.
between
De methode between test of elke waarde tussen een onder- en bovengrens ligt en neemt standaard beide eindpunten mee.
between(5, 20, inclusive="left") neemt 5 mee maar sluit 20 uit van het prijsinterval.
booleaans masker
Een booleaans masker is een reeks waarheidswaarden die aangeeft welke elementen aan een voorwaarde voldoen en moeten worden geselecteerd.
Als je elke prijs met 10 vergelijkt, ontstaat één True of False voor de rij van elke bestelling.
booleaanse reductie
Een booleaanse reductie combineert veel waarheidswaarden tot één resultaat, bijvoorbeeld of minstens één of alle elementen True zijn.
De .any() van een masker kan beantwoorden of minstens één bestelling een ontbrekende hoeveelheid heeft.
broadcasting van een scalaire waarde
Broadcasting van een scalaire waarde past één opgegeven waarde toe in een hele kolombewerking of vult een doelkolom met die waarde.
Als je elke omzet door hetzelfde bekende totaal deelt, krijg je het aandeel van elke bestelling in dat totaal.

C

categorisch datatype
Het categorische datatype geeft herhaalde labels weer via een verzameling categorieën en hun codes, wat bij grote tabellen meestal geheugen bespaart.
Een ongeordende categorische kolom staat min() niet toe, ook als de weergegeven labels gewone tekst zijn.
controle op dubbele records
Een controle op dubbele records markeert herhaalde rijen of herhaalde waarden in geselecteerde kolommen en laat meestal de eerste keer ongemarkeerd.
In een productkolom waarin Notebook meer dan eens voorkomt, markeert duplicated(subset="product") latere vermeldingen van Notebook, ook als elk bestelnummer verschilt.
correlatiematrix
Een correlatiematrix legt correlaties tussen paren vast en is symmetrisch, met correlaties van 1 met zichzelf voor variërende numerieke kolommen.
De waarde voor neerslag en temperatuur is gelijk aan die voor temperatuur en neerslag; een constante kolom geeft in plaats daarvan NaN.
CSV
CSV is een tekstformaat voor tabelrecords waarvan de velden door een scheidingsteken, meestal een komma, zijn gescheiden en dat vaak een kopregel heeft.
Een leeg veld tussen twee scheidingstekens kan een niet-geregistreerde hoeveelheid in een bestelling voorstellen.
cumulatieve som
Een cumulatieve som is een oplopend totaal met één opgetelde waarde op elke positie, dat de methode cumsum teruggeeft.
Cumulatieve sommen van dagelijkse neerslag houden bij hoeveel regen er tot en met elke dag van de week is gevallen.

D

DataFrame
Een DataFrame is een tweedimensionale pandas-tabel waarvan de kolommen een rijindex delen en elk een ander datatype kunnen hebben.
Een besteltabel slaat producttekst, numerieke hoeveelheden en prijzen in afzonderlijke kolommen op.
datatype
Een datatype is het opgeslagen type van een Series of kolom en bepaalt welke waarden die kan bevatten en welke bewerkingen mogelijk zijn.
Een kolom met hoeveelheden kan float64 gebruiken als bij één record een lege hoeveelheid als NaN is ingelezen.
datum- en tijdaccessor (dt)
De datum- en tijdaccessor dt biedt datum- en tijdonderdelen of methoden voor een Series met datum- en tijdwaarden.
Na datumconversie geeft .dt.day_name() de weekdag terug die bij elke bestellingsdatum hoort.
deelbereik op basis van labels
Een deelbereik op basis van labels selecteert een bereik met een begin- en eindlabel en neemt bij een geschikte geordende index beide eindpunten mee.
Op een index met bestellabels neemt .loc[1002:1004] de drie bestellabels 1002, 1003 en 1004 mee.
deelbereik op basis van posities
Een deelbereik op basis van posities selecteert een bereik vanaf een meegenomen beginpositie tot aan, maar exclusief, de opgegeven eindpositie.
.iloc[1:3] geeft posities 1 en 2 terug en kan verschillen van een loc-deelbereik dat beide grenzen meeneemt.
drijvendekommafout
Een drijvendekommafout is een klein verschil dat ontstaat doordat decimale waarden binair worden opgeslagen en berekend.
Een belastingberekening kan 1.9000000000000001 tonen, wat je op twee decimalen kunt afronden.

E

elementsgewijze EN-bewerking
Een elementsgewijze EN-bewerking combineert maskers met & en maakt een rij alleen True als beide overeenkomstige voorwaarden True zijn.
Een bestelling van Home die meer dan 10 kost, moet aan zowel de categorie- als de prijsvergelijking voldoen.
elementsgewijze OF-bewerking
Een elementsgewijze OF-bewerking combineert maskers met | en maakt een rij True als minstens één van de overeenkomstige voorwaarden True is.
Een selectie van artikelen van Home of prijzen boven 10 kan dure artikelen uit een andere categorie bevatten.

F

filteren
Filteren behoudt waarnemingen die aan een rijvoorwaarde voldoen, met behoud van hun waarden en bestaande indexlabels.
Nadat je bestellingen van Stationery hebt behouden, kunnen de oorspronkelijke labels hiaten hebben in plaats van opnieuw bij nul te beginnen.

G

geheelgetaltype met ondersteuning voor ontbrekende waarden
Een geheelgetaltype met ondersteuning voor ontbrekende waarden slaat gehele getallen samen met ontbrekende waarden op, die in pandas Int64 als worden weergegeven.
Een kolom met aantallen en een lege waarde kan "Int64" gebruiken in plaats van te mislukken bij conversie naar het gewone int.
geketende toekenning
Geketende toekenning probeert waarden via opeenvolgende selecties bij te werken en verandert in pandas 3 de oorspronkelijke tabel nooit.
Een gefilterde tabel gevolgd door een extra kolomselectie kan niet dienen om de oorspronkelijke tabel bij te werken.
gemiddeld rangnummer
Een gemiddeld rangnummer geeft elke gelijke waarde het gemiddelde van de posities die de groep gelijke waarden in de gesorteerde volgorde inneemt.
Twee gelijke hoogste scores die plaats 1 en 2 bezetten, krijgen beide aflopend rangnummer 1,5.
gemiddelde
Het gemiddelde is het totaal van geregistreerde numerieke waarden gedeeld door hun aantal, waarbij pandas ontbrekende waarden standaard overslaat.
Een gemiddelde hoeveelheid op basis van vijf geregistreerde aantallen mag niet door alle zes bestelrijen worden gedeeld.
gevectoriseerde bewerking
Een gevectoriseerde bewerking past één expressie toe op een hele reeks of kolom met waarden zonder expliciete Python-lus over rijen.
Een Series met prijzen vermenigvuldigen met 0,9 verlaagt elke geregistreerde prijs met dezelfde verhouding.

I

iat
De indexeringsmethode iat selecteert één cel op rij- en kolompositie vanaf nul, zonder die als labels te interpreteren.
orders.iat[2, 2] leest de cel in de derde rij en derde kolom van een besteltabel.
iloc
De indexeringsmethode iloc selecteert rijen en kolommen op gehele posities vanaf nul, onafhankelijk van hun labels of namen.
.iloc[-1] geeft de laatste rij terug, ook als het indexlabel een bestelnummer zoals 1006 is.
Index
Een index is de verzameling labels die aan een Series of aan de rijen van een DataFrame is gekoppeld en waarmee je elementen identificeert.
Met een stedenindex kun je via population["Lima"] de waarde van een stad opvragen zonder de positie te kennen.
isin
De methode isin maakt een masker dat test of elke waarde voorkomt in een opgegeven verzameling toegestane waarden.
Een test of een categorie voorkomt in ["Home", "Bags"] vervangt twee gelijkheidsvergelijkingen die met of zijn verbonden.
isna
De methode isna herkent ontbrekende elementen en geeft op elke positie True voor ontbrekende en False voor aanwezige waarden.
Een isna-masker kan de bestelling zonder hoeveelheid selecteren zonder iets met NaN te vergelijken.

K

kolom
Een kolom is een reeks met een label die één variabele in een DataFrame voorstelt en als Series met een eigen datatype wordt opgeslagen.
De kolom quantity bevat voor elke bestelling in de tabel één aantal of ontbrekende waarde.
kolomselector
Een kolomselector bepaalt welke variabelen een selectie op twee assen teruggeeft, met labels in loc en posities in iloc.
Een masker kan de rijen kiezen terwijl ["product", "unit_price"] de weer te geven kolommen kiest.
kopiëren bij schrijven
Kopiëren bij schrijven is gedrag van pandas 3 waarbij een afgeleide Series of een afgeleid DataFrame zich onafhankelijk gedraagt wanneer waarden veranderen.
Als je een opgeslagen selectie van Home-bestellingen uit een besteltabel bewerkt, verandert die selectie terwijl de besteltabel ongemoeid blijft.
kopregel
Een kopregel is de regel met de kolomnamen van een tabel, die pandas normaal uit de eerste regel van een CSV inleest.
Gebruik header=None als de eerste regel een echt record bevat dat in de gegevens moet blijven.
kwantiel
Een kwantiel markeert een positie in geordende gegevens voor een fractie van nul tot één, waarbij pandas standaard interpoleert.
quantile(0.25) kan in een temperatuurkolom een onderste kwartiel tussen twee gemeten temperaturen geven.

L

laagste rangnummer
Het laagste rangnummer geeft gelijke waarden het kleinste ingenomen rangnummer en laat hiaten voor de andere plaatsen die door de gelijke waarden zijn bezet.
Als twee waarden op de eerste plaats staan, krijgt de volgende afwijkende waarde rangnummer 3 met methode min.
loc
De indexeringsmethode loc selecteert rijen en kolommen op labels en accepteert afzonderlijke labels, lijsten, deelbereiken op labels en booleaanse maskers.
Met een index van bestelnummers kan .loc[1004, "product"] het product van één geïdentificeerde bestelling selecteren.

M

markering voor ontbrekende waarden
Een markering voor ontbrekende waarden is een element of opgeslagen waarde dat aangeeft dat een waarde ontbreekt in plaats van bekend is.
na_values=["-"] vertelt de CSV-lezer dat een koppelteken in het bestand een ontbrekende waarde voorstelt.
mediaan
De mediaan is de middelste waarde van geordende numerieke gegevens, waarbij je bij een even aantal geregistreerde waarden het gemiddelde van de twee middelste neemt.
Een zeer natte dag kan de gemiddelde wekelijkse neerslag boven de mediaan trekken, die dicht bij de typische droge dag blijft.
modus
Een modus is een waarde met de hoogste frequentie in een dataset; pandas geeft een Series terug omdat meerdere waarden die hoogste frequentie kunnen delen.
Als A en B beide drie keer voorkomen en geen waarde vaker voorkomt, geeft mode beide labels terug.

N

NaN
NaN is een markering voor ontbrekende waarden in gegevens met drijvendekommagetallen en in standaardtekstgegevens van pandas 3; het is geen bekende numerieke nul.
Een lege hoeveelheid kan de berekende omzet ontbrekend maken, terwijl bekende omzetbedragen bruikbaar blijven.
negatieve positie
Een negatieve positie telt terug vanaf het einde van een as, waarbij −1 het laatste beschikbare element aanduidt.
De positie −2 selecteert de op één na laatste kolom, ongeacht de naam van die kolom.

O

oplopende volgorde
Oplopende volgorde plaatst kleinere waarden vóór grotere en is de standaardrichting bij het sorteren van waarden en indexen in pandas.
Stel ascending=False in als een uitslagentabel de hoogste punten eerst moet tonen.

P

Pearsoncorrelatie
Pearsoncorrelatie meet de richting en sterkte van een lineaire samenhang tussen numerieke variabelen op een schaal van −1 tot 1.
Een negatieve coëfficiënt voor temperatuur en neerslag beschrijft de neiging dat op warmere dagen minder regen valt.
plaatsing van ontbrekende waarden
De plaatsing van ontbrekende waarden bepaalt waar ontbrekende waarden in een gesorteerd resultaat verschijnen, onafhankelijk van de numerieke sorteerrichting.
Een aflopende sortering zet NaN nog steeds achteraan tenzij na_position="first" expliciet is opgegeven.

Q

query
De methode query filtert een DataFrame met een tekenreeksexpressie waarin kolomnamen rechtstreeks naar hun waarden verwijzen.
query("quantity >= 2 and unit_price < 5") kan een gecombineerd bestelfilter duidelijk uitdrukken.
queryvariabele
Een queryvariabele is een externe Python-waarde waarnaar met een @ ervoor wordt verwezen, zodat die verschilt van kolomnamen.
Met limit = 5 vergelijkt query("unit_price > @limit") prijzen met die Python-waarde.

R

RangeIndex
Een RangeIndex is een reeks gehele rijlabels die standaard wordt gegeven en meestal bij nul begint en telkens met één oploopt.
Na filteren vervangt reset_index(drop=True) de behouden labels door een nieuwe standaardindex.
rangnummer
Een rangnummer is een getal dat de plaats van een waarde in geordende gegevens beschrijft en aan de oorspronkelijke rij wordt gekoppeld zonder die te verplaatsen.
Met aflopende rangnummers kan het oorspronkelijke record van elke persoon een plaats op basis van de score bevatten.
rangnummering op volgorde van voorkomen
Rangnummering op volgorde van voorkomen verdeelt gelijke waarden volgens hun volgorde in de invoer en geeft elk gelijk element met methode first een afzonderlijk rangnummer.
Als je rijen met gelijke scores anders rangschikt, kunnen hun rangnummers volgens de methode first veranderen, ook al blijven hun scores gelijk.
rangnummering zonder hiaten
Rangnummering zonder hiaten geeft opeenvolgende rangnummers aan groepen met verschillende waarden, zodat gelijke waarden geen hiaten vóór de volgende groep achterlaten.
Twee winnaars met gelijke score krijgen rangnummer 1 en de volgende afwijkende score krijgt rangnummer 2 met methode dense.
relatief rangnummer
Een relatief rangnummer drukt een rangnummer uit als fractie; de standaardmethode met gemiddelden deelt door het aantal gerangschikte waarden.
Een gemiddeld rangnummer van 4,5 onder vijf aanwezige waarden geeft een relatief rangnummer van 0,9.
relatieve frequentie
Een relatieve frequentie is het aantal van een waarde gedeeld door het aantal van alle meegetelde elementen en drukt een aandeel uit.
Drie vermeldingen van Stationery onder zes aanwezige categorieën geven 0,5, oftewel 50% na vermenigvuldiging met 100.
rename
De methode rename geeft een object terug waarvan opgegeven labels volgens een waardetoewijzing zijn gewijzigd en andere labels behouden blijven.
rename(columns={"unit_price": "price"}) wijzigt de naam van een kolom zonder de waarden te wijzigen.
reset_index
De methode reset_index geeft een tabel terug met een nieuwe standaardrijindex en behoudt de oude index als kolom, tenzij die wordt verwijderd.
Een benoemde index met bestelnummers wordt na het gewone reset_index() weer een kolom order_id.
rijgewijze toepassing met apply
Rijgewijze toepassing met apply geeft elke DataFrame-rij met axis=1 aan een functie door, zodat die meerdere kolommen kan lezen.
Een eigen rijfunctie kan quantity en price gebruiken, al is kolomvermenigvuldiging voor omzet sneller.

S

samenhang
Samenhang is een waargenomen verband tussen variabelen; een correlatie beschrijft dat verband zonder een causaal mechanisme vast te stellen.
De correlatie tussen temperatuur en neerslag in één week laat niet zien dat een temperatuurverandering een verandering in neerslag zou veroorzaken.
scalaire waarde
Een scalaire waarde is één waarde die wordt teruggegeven wanneer een selectie één cel identificeert in plaats van een Series of DataFrame.
Als je één uniek rijlabel en één kolomnaam selecteert, krijg je een productnaam als scalaire waarde terug.
scheidingsteken
Een scheidingsteken is het teken dat velden in een tekstrecord scheidt en dat je met sep opgeeft als pandas een CSV-bestand inleest.
Een bestand met puntkomma's als scheidingsteken heeft sep=";" nodig, ook als getallen binnen de velden decimale komma's gebruiken.
selectie van de n grootste waarden
Een selectie van de n grootste waarden haalt rijen met de grootste waarden op en kan alle gelijke waarden op de grens meenemen als keep is ingesteld op all.
nlargest(1, "points", keep="all") geeft twee rijen terug als twee mensen de hoogste score delen.
Series
Een Series is een eendimensionale pandas-structuur die elke opgeslagen waarde aan een indexlabel koppelt en één datatype heeft.
Een Series met neerslag kan metingen in millimeters koppelen aan de labels Mon, Tue en Wed.
set_index
De methode set_index geeft een tabel terug waarin een gekozen kolom als rijlabels wordt gebruikt en verwijdert die kolom standaard.
orders.set_index("order_id") maakt van een bestelnummer het label voor latere zoekopdrachten naar rijen.
sorteersleutel
Een sorteersleutel is de kolom of het label waarvan de waarden de volgorde bepalen; bij meerdere sleutels hebben eerdere sleutels voorrang.
Punten kunnen de primaire sorteersleutel zijn, terwijl namen records met hetzelfde puntenaantal ordenen.
Spearmancorrelatie
Spearmancorrelatie meet samenhang via rangnummers en past bij verbanden die steeds stijgen of dalen.
Een voortdurend stijgend kromlijnig verband kan via rangnummers worden beschreven zonder een rechte lijn te veronderstellen.
stabiele sortering
Een stabiele sortering behoudt de oorspronkelijke onderlinge volgorde van elementen met gelijke sorteerwaarden wanneer je die bij sorteren op één kolom aanvraagt.
kind="stable" houdt twee gelijke scores in hun eerdere volgorde in plaats van een nieuwe regel voor gelijke waarden toe te passen.
standaardafwijking
De standaardafwijking meet de spreiding rond het gemiddelde in de oorspronkelijke eenheden; pandas gebruikt standaard de steekproefnoemer.
De standaardafwijking van temperatuur wordt gemeten in graden Celsius, anders dan de variantie in graden in het kwadraat.

T

tekstaccessor (str)
De tekstaccessor str biedt gevectoriseerde tekenreeksmethoden voor een tekstserie, waaronder omzetting naar hoofdletters en tellingen van tekens.
orders["product"].str.len() berekent één naamlengte voor elk geregistreerd product.
tekstpatroonvergelijking
Een tekstpatroonvergelijking test een tekenreekspatroon tegen elke tekstwaarde, bijvoorbeeld door met str.contains binnen waarden te zoeken.
Zoeken naar "note" met case=False vindt Notebook, ook al is de N een hoofdletter.
toekenning van een scalaire waarde
Toekenning van een scalaire waarde vult alle doelcellen met één opgegeven waarde, zonder voor elke geselecteerde rij een afzonderlijke waarde nodig te hebben.
Als je nul aan een loc-selectie toewijst, krijgt elke geselecteerde cel nul en blijven andere rijen ongewijzigd.
typeconversie
Typeconversie zet waarden om naar een gekozen datatype, zodat de kolom de bewerkingen ondersteunt die de betekenis vereist.
Converteer datumtekst voordat je .dt.month opvraagt en wijs de geconverteerde Series daarna terug.
typeconversie met ontbrekende waarden bij fouten
Numerieke typeconversie met ontbrekende waarden bij fouten converteert numerieke waarden die kunnen worden ingelezen en vervangt ongeldige elementen door ontbrekende waarden in plaats van te stoppen.
Als je "7", "unknown", "2.5" converteert met errors ingesteld op coerce, ontstaat één nieuwe ontbrekende waarde.

U

uitlijning op labels
Uitlijning op labels is het koppelen van pandas-waarden op indexlabel tijdens bewerkingen, ook als hun posities verschillen.
Als je Series met steden in verschillende indexvolgordes optelt, wordt elke stad nog steeds met dezelfde stad gecombineerd.
uniciteit van de index
Uniciteit van de index betekent dat elk rijlabel slechts eenmaal voorkomt, zodat een label als eenduidige rij-identificatie kan dienen.
Controleer .index.is_unique voordat je verwacht dat één bestelnummer precies één rij teruggeeft.

V

variantie
De variantie meet de gemiddelde gekwadrateerde afwijking van het gemiddelde met de gekozen noemer; pandas gebruikt standaard ddof=1.
Je moet ddof afstemmen voordat je een spreidingsberekening van pandas vergelijkt met de standaardinstellingen van NumPy.
vervanging
Vervanging wijzigt opgegeven waarden en behoudt niet-opgegeven waarden, zoals bij een replace-bewerking op een Series.
In een categoriekolom met Bags, Home en Stationery laat vervanging van Bags door Luggage de labels Home en Stationery ongewijzigd.
voorvertoning
Een voorvertoning is een kleine weergegeven selectie van records waarmee je zichtbare waarden en structuur controleert voordat je de volledige tabel analyseert.
Met head(3) kun je de kopregel en de eerste drie records controleren zonder elke rij weer te geven.
voorwaardelijke selectie
Voorwaardelijke selectie met np.where kiest één uitkomst voor True-elementen en een andere voor False-elementen van een voorwaarde.
Een prijsdrempel kan de labels high en low opleveren zonder een Python-lus over rijen te schrijven.
voorwaardelijke wijziging
Een voorwaardelijke wijziging wijst nieuwe waarden toe aan cellen in rijen die door een voorwaarde zijn geselecteerd, meestal via één loc-toewijzing.
df.loc[mask, "price"] *= 0.9 geeft precies de rijen korting die door het masker voor de prijswijziging zijn geselecteerd.
vorm (shape)
De vorm van een DataFrame is een tuple met twee elementen: eerst het aantal rijen en daarna het aantal kolommen.
Een tabel met zes bestellingen en vier geregistreerde variabelen heeft vorm (6, 4) en 24 cellen.

W

waardefrequenties
Waardefrequenties geven aan hoe vaak elke unieke waarde voorkomt, meestal geordend van meest naar minst voorkomend.
Waardefrequenties van categorieën laten zien of de meeste geregistreerde bestellingen Stationery, Home of Bags zijn.
waardetoewijzing via een dictionary
Waardetoewijzing via een dictionary zet elke invoer om door een waarde met een sleutel op te zoeken en maakt met map een niet-opgegeven invoer ontbrekend.
Als je elke categorie aan een code toewijst, is een sleutel nodig voor elke categorie waarvan de code bekend moet blijven.
waarneming
Een waarneming is het afzonderlijke geval dat in een rij van een overzichtelijk opgebouwde tabel is vastgelegd, met de variabelen in kolommen.
Eén rij legt één bestelling vast, ook als het product ook in de rij van een andere bestelling voorkomt.
werkmap
De werkmap is de map van waaruit Python relatieve paden oplost bij het openen van bestanden zoals een CSV.
Een geldige bestandsnaam kan toch FileNotFoundError geven als Python in een andere map draait.

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