- Leren
- Informatica & ICT
- Data science & AI
- Data-analyse met Python: NumPy, pandas en visualisatie
- Gegevenstabellen met pandas
Gegevenstabellen met pandas in Python
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
- 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 indexMaak 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 structuurMaak 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 zeKies 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.
- Maak een Series en gebruik de index
- 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_csvLees 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 DataFrameControleer een zojuist ingelezen tabel met
head,info,shape,dtypesen aantallen ontbrekende en unieke waarden voordat je de tabel analyseert. - Converteer kolommen naar de juiste datatypesWijzig het datatype van een kolom met
astype,pd.to_numericenpd.to_datetime, en bewaar de geconverteerde kolom door die terug te wijzen.
- Lees een CSV-bestand in met read_csv
- Selecteer precies de rijen, kolommen en afzonderlijke waarden die je nodig hebt met
loc(labels) eniloc(posities), en voorspel de vorm en het type van elk resultaat.- Selecteer rijen en kolommen op label met locGebruik
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 indexeringsmethodeGebruik
df.iloc[rows, columns]met gehele posities, deelbereiken exclusief eindpunt en negatieve posities, lees afzonderlijke waarden metateniaten kies tussen selectie op label en op positie.
- Selecteer rijen en kolommen op label met loc
- 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 maskersMaak 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 filtersFilter met
isin,between,isna/notnaenstr.contains, en schrijf dezelfde voorwaarden als een leesbarequery-tekenreeks. - Wijzig waarden in geselecteerde rijen op een veilige manierWerk 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.
- Filter met booleaanse maskers
- Maak nieuwe kolommen uit bestaande kolommen met gevectoriseerde berekeningen en
assign, en hercodeer of transformeer waarden metnp.where,map,applyenreplace.- Bereken nieuwe kolommen uit bestaande kolommenVoeg met gevectoriseerde berekeningen een kolom toe of overschrijf een kolom, gebruik
assignom 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 applyZet voorwaarden met
np.whereom in labels, wijs metmapenreplaceandere waarden toe, pas metapplyeigen functies toe en geef waar mogelijk de voorkeur aan gevectoriseerde vormen.
- Bereken nieuwe kolommen uit bestaande kolommen
- 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 indexSorteer 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 waardenGeef elke waarde met
rankeen rangnummer, kies een methode voor gelijke waarden die bij het doel past en druk rangnummers uit als percentielen. - Vat kolommen samen met beschrijvende statistiekBereken 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 samenhangTel hoe vaak elke waarde voorkomt, toon unieke waarden, druk aantallen uit als aandelen en meet het lineaire verband tussen twee numerieke kolommen met correlatie.
- Sorteer rijen op waarden of op de index
Gegevenstabellen met pandas: uitleg
1Begrijp 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
ilocvoor 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,NaTof<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
| Selectie | Resultaat |
|---|---|
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.
shapetelt rijen en kolommen;sizetelt cellen.- Eén kolomnaam geeft een Series terug; een lijst met namen geeft een DataFrame terug.
axis=0reduceert langs de rijen;axis=1reduceert 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_indexverplaatst een kolom naar de rijlabels;reset_indexverplaatst labels terug naar een kolom.reset_index(drop=True)verwijdert oude labels.- Bewaar wijzigingen in labels door de teruggegeven tabel toe te wijzen.
renamewijzigt opgegeven labels;dropverwijdert rijen of kolommen op label.- Een index kan duplicaten bevatten; controleer de uniciteit voordat je die als ID gebruikt.
2Lees 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 bestand | Inleesoptie |
|---|---|
| Velden gescheiden door puntkomma's | sep=";" |
| Decimale komma's | decimal="," |
| Geen kopregel | header=None, names=["id", "product"] |
| Twee extra regels vóór de kopregel | skiprows=2 |
| Alleen geselecteerde velden nodig | usecols=["product", "quantity"] |
| Een korte voorvertoning | nrows=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_csvgeeft een DataFrame terug en leidt kolomtypes af.- Stem
sep,decimalen 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_valuesvoegt markeringen toe. - Datums moeten als datums worden ingelezen, met
parse_datestijdens 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
astypemislukt 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.
Int64met ondersteuning voor ontbrekende waarden slaat gehele getallen op met ontbrekende gegevens.- Converteer datums met
to_datetimeen 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.
3Selecteer 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.
| Opvraag | Vorm |
|---|---|
| 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
locselecteert 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
locstaan.
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
| Selectie | Resultaat |
|---|---|
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
ilocgebruikt 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.
atselecteert één cel op label eniatselecteert één cel op positie.
4Filter 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
isintest of waarden voorkomen en~keert het masker om.betweenneemt beide eindpunten mee tenzijinclusivede regel wijzigt.isnaennotnasporen ontbrekende en geregistreerde waarden op.str.containsdoorzoekt tekst;case=Falsenegeert hoofdletters enna=Falsesluit ontbrekende tekst uit.- Binnen
queryworden 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.
5Voeg 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.
assigngeeft 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
.stren.dtvoor 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 wijziging | Geschikte methode |
|---|---|
| Geef elke bekende categorie een code | map met een dictionary |
| Hernoem enkele bestaande labels | replace |
| Kies tussen twee uitkomsten op basis van een voorwaarde | np.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.wherekiest voor elke voorwaardewaarde een uitkomst voor waar of onwaar.mapmet een dictionary maakt niet-opgegeven waarden ontbrekend;replacebehoudt ze.- Geef de functie zelf door aan
apply; gebruikaxis=1voor een rijfunctie op een DataFrame. - Geef de voorkeur aan gevectoriseerde bewerkingen wanneer je de regel ermee kunt uitdrukken.
clipbegrenst waarden, terwijlroundenabsze transformeren zonder rijen te selecteren.
6Sorteer 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_valuesordent rijen op gegevenswaarden;sort_indexordent rijlabels.ascending=Falsezet 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
| Methode | Aflopende rangnummers in oorspronkelijke rijvolgorde | Regel voor gelijke waarden |
|---|---|---|
average | 3.5, 1.5, 3.5, 5.0, 1.5 | Gemiddelde van ingenomen rangnummers |
min | 3, 1, 3, 5, 1 | Kleinste ingenomen rangnummer |
max | 4, 2, 4, 5, 2 | Grootste ingenomen rangnummer |
dense | 2, 1, 2, 3, 1 | Eén rangnummer per unieke waarde, geen hiaten |
first | 3, 1, 4, 5, 2 | Afzonderlijke 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=Truedoor 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.
describeverzamelt veelgebruikte numerieke statistieken; tekstkolommen hebben samenvattingen op basis van frequenties.countsluit ontbrekende waarden uit, terwijlsizeze meetelt.- De standaardafwijking van pandas gebruikt
ddof=1; NumPy gebruikt standaardddof=0. - Kwantielen kunnen tussen metingen interpoleren.
idxmaxenidxmingeven labels terug;cumsumgeeft cumulatieve totalen terug.aggvraagt meerdere statistieken op enaxisbepaalt 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.
| Vraag | Methode |
|---|---|
| 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_countsgeeft frequenties; normalisatie geeft aandelen van de getelde waarden.unique,nuniqueenmodebeantwoorden 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
1Maak een tabel met betekenisvolle labels
12 stappen
- 1IntroductieHoud 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.
- 2VoorbeeldMaak 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, terwijlrain.iloc[0]4.5 geeft. De eerste opvraag noemt een dag; de tweede een positie..dtypeisfloat64en.sizeis 3. - 3UitlegPas een regel toe op elke waarde
Een Series ondersteunt gevectoriseerde bewerkingen:
rain * 2verdubbelt elke meting en behoudt de daglabels.rain > 4levert True, False en True op, opnieuw met labels per dag.Gebruik attributen zoals
.index,.nameen.dtypezonder haakjes. Als je de waarden als NumPy-array nodig hebt, roep je.to_numpy()aan;.valueskan voor sommige datatypes een pandas-array teruggeven. - 4VoorbeeldTel 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 + bwordt 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. - 5UitdagingVoorspel 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.
- 6VoorbeeldZet 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.
.shapeis(2, 3), terwijl.size6 is omdat dit elke cel telt. - 7KernpuntBehoud 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, omdatdf.sizehet aantal cellen van het DataFrame betekent. - 8UitdagingKies 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. - 9VoorbeeldGebruik 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. Controleerby_id.index.is_uniquevoordat je erop vertrouwt dat elk nummer precies één rij identificeert; pandas staat dubbele labels toe. - 10TipSla een wijziging van labels op
rename,drop,set_indexenreset_indexgeven nieuwe tabellen terug. Bewaar het resultaat met een toewijzing, zoalsorders = 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
.columnsals de verwachte nieuwe naam ontbreekt. - 11UitdagingHerstel 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. Metdrop=Truezou je die ID's juist verwijderen. De rijvolgorde blijft hetzelfde. - 12SamenvattingVoorspel 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.
2Lees een CSV-bestand in en controleer de betekenis
13 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieBehandel inlezen als een controleerbare stap
- 2UitlegLees records in een tabel in
- 3VoorbeeldStem scheidingstekens en decimaaltekens af
- 4TipBehoud codes tijdens het inlezen
- 5UitdagingBehoud het eerste record
- 6VoorbeeldControleer de zichtbare indeling
- 7UitlegTel wat aanwezig is en ontbreekt
- 8UitdagingControleer een ID en een meting
- 9VoorbeeldConverteer numerieke tekst en spoor een fout op
- 10KernpuntBewaar aantallen met ontbrekende waarden als gehele getallen
- 11VoorbeeldMaak datumbewerkingen beschikbaar
- 12UitdagingHerstel een numerieke import
- 13SamenvattingVerbind indeling, datatypes en aantallen
3Kies rijen op identiteit of plaats
10 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieVraag of identiteit of plaats van belang is
- 2VoorbeeldLees een bekende bestelling
- 3VoorbeeldLees een labelbereik inclusief eindpunten
- 4UitdagingBehoud een tabel met één rij
- 5VoorbeeldLees een bereik op basis van posities
- 6TipLees terug vanaf en voorbij het einde
- 7UitdagingVoorspel het verschil tussen één rij en één waarde
- 8VerbandGebruik een korte vorm voor één cel
- 9UitdagingVolg een rij tijdens het sorteren
- 10SamenvattingGeef zowel de selector als de vorm aan
4Filter records en werk de juiste tabel bij
13 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieZet een gegevensvraag om in een rijtest
- 2VoorbeeldMaak een booleaans masker
- 3UitlegVereis beide voorwaarden
- 4TipGebruik alleen één waarheidswaarde als dat nodig is
- 5UitdagingTel een gecombineerde voorwaarde
- 6VoorbeeldDruk een bereik rechtstreeks uit
- 7KernpuntZoek ontbrekende waarden met een test
- 8UitdagingZet een filter om naar query
- 9VoorbeeldGeef precies de prijzen van Home korting
- 10UitlegZie waarom een keten het oorspronkelijke object mist
- 11TipKoppel wijzigingswaarden op label
- 12UitdagingCombineer filteren en wijzigen
- 13SamenvattingMaak voorwaarden en doelen expliciet
5Zet bestaande kolommen om in bruikbare nieuwe gegevens
12 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieDruk één regel uit voor elke kolom
- 2VoorbeeldBereken één omzetbedrag per bestelling
- 3KernpuntLees de noemer achter een gemiddelde
- 4VoorbeeldVoeg een kolom toe binnen een keten
- 5UitdagingPlaats een binnenkomende Series
- 6VoorbeeldKies labels op basis van een drempelwaarde
- 7UitlegBepaal wat niet-opgegeven waarden betekenen
- 8UitdagingKies een methode voor gedeeltelijke hercodering
- 9TipGeef functies door zonder ze aan te roepen
- 10VoorbeeldBegrens waarden zonder records te verwijderen
- 11UitdagingVolg een berekende en gehercodeerde kolom
- 12SamenvattingControleer de regel en invoer zonder overeenkomst
6Orden gegevens en interpreteer hun samenvattingen
18 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieKies de weergave die de vraag beantwoordt
- 2VoorbeeldSorteer eerst op punten en dan op namen
- 3TipBehoud alle gelijke waarden op de grens
- 4UitdagingOnderscheid labelvolgorde van waardevolgorde
- 5VoorbeeldBereken het gemiddelde van plaatsen bij gelijke waarden
- 6UitlegKies hiaten of opeenvolgende groepen
- 7UitdagingLees een relatief rangnummer
- 8VoorbeeldMaak een weersamenvatting
- 9UitlegStem de noemer voor spreiding af
- 10VoorbeeldLees kwartielen en een scheefgetrokken gemiddelde
- 11UitdagingControleer een gemiddelde aan de hand van het aantal
- 12VoorbeeldTel categorieën en aandelen
- 13KernpuntOnderscheid drie vragen over waarden
- 14UitdagingTel een voorwaarde als fractie
- 15UitlegBeschrijf samenhang precies
- 16UitdagingLees een matrix na controle van de gegevens
- 17UitdagingKies en rapporteer een samenvatting
- 18SamenvattingHoud de regel van elke samenvatting zichtbaar
Gegevenstabellen met pandas: oefenvragen
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?Toon antwoordVerberg antwoord
s.iloc[0] om de eerste waarde op positie op te vragen; gehele sleutels tussen vierkante haken blijven labels.Vraag 2 van 10
[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?Toon antwoordVerberg antwoord
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
[30, 10, 20]. Welke rij selecteert df.loc[10]?Toon antwoordVerberg antwoord
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?Toon antwoordVerberg antwoord
& in plaats van |.Vraag 5 van 10
[2.0, 5.0, NaN] en eenheidsprijzen [7.0, 3.0, 9.0]. Wat is het standaardgemiddelde van hun rijgewijze producten?Toon antwoordVerberg antwoord
Vraag 6 van 10
[5.0, NaN, 2.0]. Waar verschijnt NaN bij een standaard aflopende sortering op waarde?Toon antwoordVerberg antwoord
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"]?Toon antwoordVerberg antwoord
Vraag 8 van 10
df.isna().any(axis=1).sum() terug?Toon antwoordVerberg antwoord
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
["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?Toon antwoordVerberg antwoord
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?Toon antwoordVerberg antwoord
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
.size?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
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]?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
chosen = df[df["active"]] gevolgd door chosen["score"] = 0. Wat gebeurt er met df?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
np.where(s >= 6, "large", "small") op voor de waarden [4, 6, 9]?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
[90, 70, 90, 50] worden gerangschikt met method="min", ascending=False. Welke rangnummers ontstaan in de oorspronkelijke rijvolgorde?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
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?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?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
[12, 4, 12, 8] worden oplopend gerangschikt met de standaardmethode en pct=True. Welk relatief rangnummer hoort bij elke 12?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"]?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?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
501,Sensor. Hoe lees je het in met kolommen id en device zonder dat eerste record te verliezen?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
df.loc[12:14, ["mass_kg"]] op een geordende index [11, 12, 13, 14]?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?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
pd.Series([-2, 6, 14]).clip(lower=0, upper=10)?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
["L", "M", "L", None]. Welk aandeel kent value_counts(normalize=True) standaard toe aan L?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()?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
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?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
[11, 9, 9, 6]. Wat zijn het aantal rijen en de kleinste score die df.nlargest(2, "score", keep="all") teruggeeft?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?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")?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
[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"]?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
[2, 5, 8] voldoen aan .between(2, 8, inclusive="neither")?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?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
[3.0, 7.0, NaN, 8.0]. Wat zijn hun standaardgemiddelde en aantal aanwezige waarden?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()?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
"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?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
[2.0, NaN, 8.0, 5.0]. Wat is de som van de waarden die s.notna() & (s != 5) & (s < 8) selecteert?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
[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?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
df. De volgende regel is df.reset_index(). Waarom mislukt df.loc[0] nog steeds?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
[8, 3, 6, 1]. Welke labels blijven over in df.iloc[-2:][["x"]]?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]?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
["Probe A", "sensor", None, "PROBE B"]. Welke standaardrijlabels voldoen aan .str.contains("probe", case=False, na=False)?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?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
[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?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()?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
s bevat [2.0, 4.0, 6.0]. Wat zijn s.std() en np.std(s.to_numpy()), afgerond op drie decimalen?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?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Kom je niet uit je eigen opgave? Huiswerkhulp
Kernbegrippen
A
aantal aanwezige waarden
aantal unieke waarden
afgeleide kolom
aggregatie
agg(["mean", "max"]) geeft twee verschillende samenvattingen voor elke geselecteerde numerieke kolom.as
df.sum(axis=1) telt de geselecteerde numerieke kolommen binnen elke rij op en geeft één totaal per rij.aselecte steekproef
sample(3, random_state=0) is nuttig om rijen buiten het begin of einde van een tabel te controleren.assign
at
orders.at[2, "product"] leest het product op label 2 in een besteltabel met standaardindex.automatische typeafleiding
"001" omzetten in 1 tenzij het datatype als tekst is opgegeven.B
begrenzen
between
between(5, 20, inclusive="left") neemt 5 mee maar sluit 20 uit van het prijsinterval.booleaans masker
booleaanse reductie
.any() van een masker kan beantwoorden of minstens één bestelling een ontbrekende hoeveelheid heeft.broadcasting van een scalaire waarde
C
categorisch datatype
min() niet toe, ook als de weergegeven labels gewone tekst zijn.controle op dubbele records
duplicated(subset="product") latere vermeldingen van Notebook, ook als elk bestelnummer verschilt.correlatiematrix
CSV
cumulatieve som
D
DataFrame
datatype
float64 gebruiken als bij één record een lege hoeveelheid als NaN is ingelezen.datum- en tijdaccessor (dt)
.dt.day_name() de weekdag terug die bij elke bestellingsdatum hoort.deelbereik op basis van labels
.loc[1002:1004] de drie bestellabels 1002, 1003 en 1004 mee.deelbereik op basis van posities
.iloc[1:3] geeft posities 1 en 2 terug en kan verschillen van een loc-deelbereik dat beide grenzen meeneemt.drijvendekommafout
1.9000000000000001 tonen, wat je op twee decimalen kunt afronden.E
elementsgewijze EN-bewerking
elementsgewijze OF-bewerking
F
filteren
G
geheelgetaltype met ondersteuning voor ontbrekende waarden
"Int64" gebruiken in plaats van te mislukken bij conversie naar het gewone int.geketende toekenning
gemiddeld rangnummer
gemiddelde
gevectoriseerde bewerking
I
iat
orders.iat[2, 2] leest de cel in de derde rij en derde kolom van een besteltabel.iloc
.iloc[-1] geeft de laatste rij terug, ook als het indexlabel een bestelnummer zoals 1006 is.Index
population["Lima"] de waarde van een stad opvragen zonder de positie te kennen.isin
["Home", "Bags"] vervangt twee gelijkheidsvergelijkingen die met of zijn verbonden.isna
K
kolom
kolomselector
["product", "unit_price"] de weer te geven kolommen kiest.kopiëren bij schrijven
kopregel
header=None als de eerste regel een echt record bevat dat in de gegevens moet blijven.kwantiel
quantile(0.25) kan in een temperatuurkolom een onderste kwartiel tussen twee gemeten temperaturen geven.L
laagste rangnummer
loc
.loc[1004, "product"] het product van één geïdentificeerde bestelling selecteren.M
markering voor ontbrekende waarden
na_values=["-"] vertelt de CSV-lezer dat een koppelteken in het bestand een ontbrekende waarde voorstelt.mediaan
modus
N
NaN
negatieve positie
O
oplopende volgorde
ascending=False in als een uitslagentabel de hoogste punten eerst moet tonen.P
Pearsoncorrelatie
plaatsing van ontbrekende waarden
na_position="first" expliciet is opgegeven.Q
query
query("quantity >= 2 and unit_price < 5") kan een gecombineerd bestelfilter duidelijk uitdrukken.queryvariabele
limit = 5 vergelijkt query("unit_price > @limit") prijzen met die Python-waarde.R
RangeIndex
reset_index(drop=True) de behouden labels door een nieuwe standaardindex.rangnummer
rangnummering op volgorde van voorkomen
rangnummering zonder hiaten
relatief rangnummer
relatieve frequentie
rename
rename(columns={"unit_price": "price"}) wijzigt de naam van een kolom zonder de waarden te wijzigen.reset_index
reset_index() weer een kolom order_id.rijgewijze toepassing met apply
S
samenhang
scalaire waarde
scheidingsteken
sep=";" nodig, ook als getallen binnen de velden decimale komma's gebruiken.selectie van de n grootste waarden
nlargest(1, "points", keep="all") geeft twee rijen terug als twee mensen de hoogste score delen.Series
set_index
orders.set_index("order_id") maakt van een bestelnummer het label voor latere zoekopdrachten naar rijen.sorteersleutel
Spearmancorrelatie
stabiele sortering
kind="stable" houdt twee gelijke scores in hun eerdere volgorde in plaats van een nieuwe regel voor gelijke waarden toe te passen.standaardafwijking
T
tekstaccessor (str)
orders["product"].str.len() berekent één naamlengte voor elk geregistreerd product.tekstpatroonvergelijking
"note" met case=False vindt Notebook, ook al is de N een hoofdletter.toekenning van een scalaire waarde
typeconversie
.dt.month opvraagt en wijs de geconverteerde Series daarna terug.typeconversie met ontbrekende waarden bij fouten
"7", "unknown", "2.5" converteert met errors ingesteld op coerce, ontstaat één nieuwe ontbrekende waarde.U
uitlijning op labels
uniciteit van de index
.index.is_unique voordat je verwacht dat één bestelnummer precies één rij teruggeeft.V
variantie
vervanging
voorvertoning
head(3) kun je de kopregel en de eerste drie records controleren zonder elke rij weer te geven.voorwaardelijke selectie
voorwaardelijke wijziging
df.loc[mask, "price"] *= 0.9 geeft precies de rijen korting die door het masker voor de prijswijziging zijn geselecteerd.vorm (shape)
(6, 4) en 24 cellen.W
waardefrequenties
waardetoewijzing via een dictionary
waarneming
werkmap
Over deze les
Door StudeliFout melden
Maak je eigen Studiemateriaal
Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.