Met een Python for loop kun je herhaaldelijk dezelfde code binnen een Python script uitvoeren. Als data scientist kan dit van pas komen bij bijvoorbeeld het transformeren van datasets of het maken van meerdere visualisaties met andere instellingen.
In dit blog leer je in de volgende stappen alles over for loops:
- Wat is een for loop?
- De verschillen tussen een for loop en een while statement
- Met range() maak je een reeks
- Indexing met enumerate()
- Loop over key-value paren in een dictionary
- Nested loops voor het itereren binnen elementen
- Met list comprehension pas je logica toe in een list
- Itereer over rijen in Pandas dataframes
Wat is een for loop?
Met een Python for loop of for statement itereer je over de elementen van een verzameling, waarbij tijdens iedere iteratie hetzelfde stuk code wordt uitgevoerd. Met een for loop kun je bijvoorbeeld de getallen in een list één voor één bij elkaar optellen. Goed Python leren kan alleen als je dit concept volledig doorgrondt.
Naast itereren over elementen in een list kun je dit ook doen met bijvoorbeeld een Numpy array en kun je itereren over karakters in een string. Numpy is een Python package die je kunt importeren.
De verschillen tussen een for loop en een while statement
Een for loop is iets anders dan het Python while statement. Met een while statement kun je net als met een for loop code ook herhaaldelijk uitvoeren, maar dit alleen gedurende dat een bepaalde conditie vervuld is. Stel we kijken naar een lijst met getallen. Met een while statement kan je deze getallen bijvoorbeeld één voor één optellen, totdat een bepaalde maximale waarde bereikt is. Met een for loop kun je voor elk element van de list een stuk code uitvoeren. Door gebruik te maken van een if statement kun je dezelfde functionaliteit creëren.
getallen = [1, 2, 3, 4, 5, 6]
i = 0
som_getallen = 0
while som_getallen < 10:
som_getallen+=getallen[i]
i+=1
print(som_getallen)
10
getallen = [1, 2, 3, 4, 5, 6]
som_getallen = 0
for getal in getallen:
if som_getallen < 10:
som_getallen+=getal
print(som_getallen)
10
Een while statement stopt met het uitvoeren zodra de conditie niet meer geldig is. Een for loop zal doorgaan totdat alle elementen doorlopen zijn. Zeker bij grote datasets kan dit leiden tot een significant tijdsverlies. Je kunt dit verhelpen door de loop vroegtijdig af te breken met het break commando.
getallen = [1, 2, 3, 4, 5, 6]
som_getallen = 0
for getal in getallen:
if som_getallen < 10:
som_getallen+=getal
else:
break
print(getal)
print('Som van de getallen:', som_getallen)
1
2
3
4
Som van de getallen: 10
Met range() maak je een reeks
Met de functie range() maak je een reeks van getallen aan. Deze reeks heeft altijd een begingetal en een eindgetallen, en bevat alle tussenliggende getallen. Wanneer je dit gebruikt in een for loop zijn de getallen de elementen waarover je itereert. Wanneer je aan range() één parameter meegeeft dan is dit het eindgetal, wat exclusief is. Wanneer je twee parameters meegeeft dan is het eerste getal het begingetal (inclusief), en het tweede getal het eindgetal (exclusief). Je ziet dit duidelijk in onderstaande voorbeelden.
for i in range(3):
print(i)
0
1
2
for i in range(1,3):
print(i)
1
2
Indexing met enumerate()
Het kan handig zijn om wanneer je met een for loop over elementen itereert, je het positienummer (index) van elk element kan gebruiken. Dit kun je doen met de functie enumerate(). Hiermee krijgt het eerste element index 0, en het de volgende elementen de opeenvolgende getallen.
getallen = [11, 12, 13]
for index, getal in enumerate(getallen):
print(index, getal)
0 11
1 12
2 13
Loop over key-value paren in een dictionary
Een dictionary is een datatype waarin je meerdere datapunten op kunt slaan met key-value paren. Met methode .items() in combinatie met een for loop ben je in staat om achtereenvolgens alle keys en values uit te lezen.
d = {'banaan': 3, 'appel': 4, 'peer': 1}
for key, value in d.items():
print(key, value)
banaan 3
appel 4
peer 1
Nested loops voor het itereren binnen elementen
Met een for loop itereer je over de elementen van een bepaalde variabele. Hierbij kan elk element zelf ook weer uit meerdere elementen bestaan. Een voorbeeld hiervan is een list met lists als elementen. Met nested for loops kun je over de elementen van elementen itereren. Onderstaand voorbeeld maakt dit duidelijk.
list_of_lists = [[1,2,3], ['a','b','c']]
for i in list_of_lists:
for j in i:
print(j)
1
2
3
a
b
c
Met list comprehension pas je logica toe in een list
List comprehension is een compacte manier om met een for loop en logica een list samen te stellen. Onderstaand voorbeeld laat dit zien. Hierbij beginnen we met een list met getallen. Vervolgens maken we in één regel code in een nieuwe variabele een list aan die de kwadraten van de individuele getallen bevat.
getallen = [1,2,3,4,5]
kwadraten = [i*i for i in getallen]
kwadraten
[1, 4, 9, 16, 25]
Itereer over rijen in Pandas dataframes
Met de methode .iterrows() kun je over de rijen van een Pandas dataframe itereren. Hierbij krijg je bij elke iteratie het indexnummer en de waarden van de rij terug. We bekijken hoe dit werkt met een voorbeeld dataframe met gegevens van medewerkers. Allereerst importeren we Pandas en maken we het dataframe aan.
import pandas as pd
data = {'naam': ['Henk', 'Magda', 'Wies'],
'functie': ['ML Engineer', 'Data Scientist', 'Data Engineer'],
'jaar_in_dienst': [2019,2018,2019]}
df = pd.DataFrame(data)
df
naam | functie | jaar_in_dienst | |
---|---|---|---|
0 | Henk | ML Engineer | 2019 |
1 | Magda | Data Scientist | 2018 |
2 | Wies | Data Engineer | 2019 |
Vervolgens zie je dat we met de methode .iterrows() de rijen als afzonderlijke elementen kunnen verkrijgen vanuit een for loop.
for index, row in df.iterrows():
print(index)
print(row)
print('...')
0
naam Henk
functie ML Engineer
jaar_in_dienst 2019
Name: 0, dtype: object
...
1
naam Magda
functie Data Scientist
jaar_in_dienst 2018
Name: 1, dtype: object
...
2
naam Wies
functie Data Engineer
jaar_in_dienst 2019
Name: 2, dtype: object
...
Je kunt dit bijvoorbeeld gebruiken om conditioneel wijzigingen door te voeren. In het onderstaande voorbeeld itereren we over alle rijen heen, en passen we als de functie gelijk is aan 'ML Engineer' deze aan naar 'Machine Learning Engineer'.
for index, row in df.iterrows():
if row['functie'] == 'ML Engineer':
df.loc[index, 'functie'] = 'Machine Learning Engineer'
df
naam | functie | jaar_in_dienst | |
---|---|---|---|
0 | Henk | Machine Learning Engineer | 2019 |
1 | Magda | Data Scientist | 2018 |
2 | Wies | Data Engineer | 2019 |
Houd er rekening mee dat er meestal snellere manieren zijn om conditionele aanpassingen te doen aan Pandas dataframes dan vanuit een for loop.
Samenvatting
Je hebt geleerd wat een for loop is en hoe je een for loop in Python toe kunt passen. Met een for loop kun je over de elementen van variabelen itereren, zoals over de rijen in een Pandas dataframe. Je weet nu dat je meerdere lagen aan kunt brengen met nested for loops en dat je een loop vroegtijdig af kunt breken met het break commando.
Zoals je merkt duurt Python leren helemaal niet zo lang en geeft het je veel meer flexibiliteit dan je in bijvoorbeeld Excel hebt. Wil jij je van data analyst naar data scientist ontwikkelen? Overweeg dan om met onze training mee te doen.
Wil jij snel op stoom zijn als data scientist en Python expert? Krijg in twee dagen vertrouwen in het analyseren van data met Python. Schrijf je in voor onze Python cursus voor data science en ontwikkel je onder begeleiding van ervaren trainers succesvol verder als data scientist. Heb je al ervaring in Python? Ga dan direct voor onze machine learning training.
Download één van onze opleidingsbrochures voor meer informatie
Rik is data scientist en marketeer bij Data Science Partners. Vanuit zijn achtergrond op de Technische Universiteit Eindhoven heeft hij veel affiniteit met data. Na zijn studie heeft hij als consultant altijd met data gewerkt en tevens ervaring opgedaan in het geven van trainingen.