python for loop uitleg

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?

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.

wat is een python for loop
Screenshot uit Jupyter Notebook (lees ook: wat is Jupyter Notebook en hoe installeer ik het)

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. 

In [10]:
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
In [8]:
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.

In [11]:
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 vertrouwen waardevolle inzichten halen uit data? Schrijf je in voor een van onze Python en data science trainingen.


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.

In [14]:
for i in range(3):
    print(i)
0
1
2
In [15]:
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.

In [17]:
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.

In [4]:
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.

In [33]:
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.

In [34]:
getallen = [1,2,3,4,5]
kwadraten = [i*i for i in getallen]
kwadraten
Out[34]:
[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. 

In [31]:
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
Out[31]:
naamfunctiejaar_in_dienst
0HenkML Engineer2019
1MagdaData Scientist2018
2WiesData Engineer2019

Vervolgens zie je dat we met de methode .iterrows() de rijen als afzonderlijke elementen kunnen verkrijgen vanuit een for loop.

In [32]:
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’.

In [29]:
for index, row in df.iterrows():
    if row['functie'] == 'ML Engineer':
        df.loc[index, 'functie'] = 'Machine Learning Engineer'
df
Out[29]:
naamfunctiejaar_in_dienst
0HenkMachine Learning Engineer2019
1MagdaData Scientist2018
2WiesData Engineer2019

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.

Met vertrouwen waardevolle inzichten halen uit data? Schrijf je in voor een van onze Python en data science trainingen.


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.

by: