Het Pandas DataFrame is een Python-gegevensstructuur die kan worden gebruikt om tabellen te maken en te bewerken. We leggen de structuur van de gegevensstructuur en de belangrijkste methoden en eigenschappen ervan uit.

Hoe werkt Pandas DataFrame?

Pandas DataFrames vormen de kern van de Python Pandas-bibliotheek en maken efficiënte en flexibele gegevensanalyse in Python mogelijk. Een Pandas DataFrame is een tweedimensionale tabelstructuur met genummerde rijen en gelabelde kolommen. Deze structuur maakt het mogelijk om gegevens te ordenen in een gemakkelijk te begrijpen en te bewerken vorm, vergelijkbaar met spreadsheetprogramma’s zoals Excel of LibreOffice. Elke kolom in een DataFrame kan verschillende Python-gegevenstypen bevatten, wat betekent dat een DataFrame heterogene gegevens kan opslaan, bijvoorbeeld numerieke waarden, tekenreeksen en booleaanse waarden in één tabel.

Tip

Pandas DataFrames zijn gebaseerd op NumPy-arrays, waardoor gegevens efficiënt kunnen worden verwerkt en waarden kunnen worden berekend. De DataFrames van Panda verschillen echter in sommige opzichten van NumPy-gegevens structuren, bijvoorbeeld wat betreft hun heterogeniteit en het aantal dimensies. Daarom zijn NumPy-gegevensstructuren geschikt voor het manipuleren van grote hoeveelheden numerieke waarden en zijn de gegevensstructuren van Panda meer geschikt voor algemene gegevensmanipulatie.

Structuur van Pandas DataFrames

Een DataFrame bestaat uit drie hoofdonderdelen: de gegevens, rij-indexen en kolomnamen. De rij-index (of gewoon index) identificeert elke rij op unieke wijze. Standaard worden rijen geïndexeerd met numerieke waarden, maar deze kunnen worden vervangen door tekenreeksen. Het is belangrijk om op te merken dat Pandas DataFrames nul-geïndexeerd zijn, wat betekent dat indexen beginnen bij 0.

Afbeelding: The structure of a Pandas DataFrame
Pandas DataFrames have a tabular structure and are therefore very similar to Excel or SQL tables.
Opmerking

Hoewel Pandas DataFrames tot de populairste en nuttigste Python-datastructuren behoren, maken ze geen deel uit van de basistaal en moeten ze apart worden geïmporteerd. Dit doe je met regel import pandas of from pandas import DataFrame aan het begin van je bestand. Je kunt ook import pandas as pd gebruiken als je naar de module wilt verwijzen met een kortere naam (in dit geval ‘pd’).

Gebruik van Pandas DataFrames

Pandas DataFrames bieden verschillende technieken en methoden voor efficiënte gegevensverwerking, analyse en visualisatie. Hieronder leert u meer over de belangrijkste concepten en methoden voor gegevensmanipulatie met behulp van Pandas DataFrames.

Hoe maak je een Pandas DataFrame aan?

Als u de gewenste gegevens al in een Python-lijst of Python-woordenboek hebt opgeslagen, kunt u daar eenvoudig een DataFrame van maken. Geef de bestaande gegevensstructuur gewoon door aan de DataFrame-constructor met behulp van pandas.DataFrame([data]). Hoe Pandas uw gegevens interpreteert, hangt af van de structuur die u opgeeft. U kunt bijvoorbeeld als volgt een Pandas DataFrame maken op basis van een Python-lijst:

import pandas
lists = ["Ahmed", "Beatrice", "Candice", "Donovan", "Elisabeth", "Frank"]
df = pandas.DataFrame(list)
print(df)
# Output:
#            0
# 0     	Ahmed
# 1      	Beatrice
# 2     	Candice
# 3    		Donovan
# 4  	  	Elisabeth
# 5  		Frank
python

Zoals u in het bovenstaande voorbeeld kunt zien, kunt u met eenvoudige lijsten alleen DataFrames maken met één enkele, niet-gelabelde kolom. Daarom wordt aanbevolen om DataFrames te maken op basis van woordenboeken die lijsten bevatten. De sleutels worden geïnterpreteerd als kolomnamen en de lijsten als de bijbehorende gegevens. Het volgende voorbeeld illustreert dit:

import pandas
datA = {
    'Name': ['Arthur', 'Bruno', 'Christoph'],
    'Age': [34, 30, 55],
    'Income': [75000.0, 60000.5, 90000.3],
}
df = pandas.DataFrame(data)
print(df)
# Output:
#         Name  Age   Income
# 0     Arthur     34  75000.0
# 1      Bruno     30  60000.5
# 2  Christoph     55  90000.3
python

Met deze methode heeft het DataFrame meteen de gewenste indeling en de gewenste kopteksten. Als u echter niet wilt vertrouwen op de ingebouwde Python-gegevensstructuren, kunt u uw gegevens ook laden vanuit een externe bron, zoals een CSV-bestand of een SQL-database. Roep gewoon de juiste Pandas-functie aan:

import pandas
import sqlalchemy
# DataFrame of CSV:
csv = pandas.read_csv("csv-data/files.csv")
# DataFrame of SQL:
engine = create_engine('postgresql://username:password@localhost:5432/mydatabase')
sql = pandas.read_sql_query('SELECT * FROM table', engine)
python

De DataFrames csv en sql in het bovenstaande voorbeeld bevatten nu alle gegevens uit de data.csv en de SQL-tabel table. Wanneer u een DataFrame maakt op basis van een externe bron, kunt u aanvullende details specificeren, bijvoorbeeld of de numerieke indices al dan niet in de DataFrame moeten worden opgenomen. Meer informatie over de aanvullende argumenten van de twee functies vindt u op de officiële documentatiepagina van Pandas DataFrame.

Tip

Om een Pandas DataFrame te maken op basis van een SQL-tabel, moet u Pandas gebruiken in combinatie met een Python SQL-module zoals SQLAlchemy. Maak een verbinding met de database met behulp van de door u gekozen SQL-module en geef deze door aan read_sql_query().

Hoe gegevens weergeven in Pandas DataFrames

Met Pandas DataFrames kunt u niet alleen de volledige tabel weergeven, maar ook afzonderlijke rijen en kolommen. U kunt specifieke rijen en kolommen selecteren om te bekijken. Het volgende voorbeeld illustreert hoe u afzonderlijke of meerdere rijen en kolommen kunt weergeven:

# Output 0-th line
print(df.loc[0])
# Output lines 3 to 6
print(df.loc[3:6])
# Output lines 3 and 6
print(df.loc[[3, 6]])
# Output "Occupation" column
print(df["Occupation"])
# Output "Occupation" and "Age" columns
print(df[["Occupation", "Age"]])
# Selection of multiple rows and columns
print(df.loc[[3, 6], ['Occupation', 'Age']])
python

In het voorbeeld wordt naar een kolom verwezen door de naam ervan tussen enkele haakjes te plaatsen, vergelijkbaar met hoe je waarden in Python-woordenboeken opvraagt. Het kenmerk loc wordt daarentegen gebruikt om naar rijen te verwijzen. Met loc kun je ook logische voorwaarden toepassen om gegevens te filteren. Het volgende codeblok laat zien hoe je alleen de rijen kunt weergeven waarin de waarde voor ‘leeftijd’ groter is dan 30:

print(df.loc[df['Age'] > 30])
python

U kunt echter ook het iloc gebruiken om rijen en kolommen te selecteren op basis van hun positie in het DataFrame. U kunt bijvoorbeeld de cel weergeven die zich in de derde rij en de vierde kolom bevindt:

print(df.iloc[3, 4]) 
# Output: 
# London
 
print(df.iloc[[3, 4, 6], 4]) 
# Output: 
# 3 London
# 4 Birmingham
# 6 Preston
python

Hoe je met Pandas DataFrames door regels kunt itereren

Bij het verwerken van gegevens in Python is het vaak nodig om de rijen van een Pandas DataFrame te doorlopen om dezelfde bewerking op alle gegevens toe te passen. Pandas biedt hiervoor twee methoden: itertuples() en iterrows(). Elke methode heeft zijn eigen voor- en nadelen wat betreft prestaties en gebruiksvriendelijkheid.

De methode iterrows() retourneert een tuple van index en Series voor elke rij in het DataFrame. Een Series is een Pandas- of NumPy-gegevensstructuur die vergelijkbaar is met een Python-lijst, maar betere prestaties biedt. U kunt afzonderlijke elementen in de Series openen met behulp van de kolomnaam, wat de gegevensverwerking vereenvoudigt.

Hoewel Pandas Series efficiënter zijn dan Python-lijsten, brengen ze toch enige prestatie-overhead met zich mee. Daarom wordt de itertuples() met name aanbevolen voor zeer grote DataFrames. In tegenstelling tot iterrows() retourneert itertuples() de volledige rij inclusief index als tuples, die beter presteren dan Series. Met tuples kunt u individuele elementen openen met behulp van puntnotatie, vergelijkbaar met het openen van attributen van een object.

Een ander belangrijk verschil tussen series en tuples is dat tuples niet veranderlijk zijn. Als u dus een DataFrame wilt doorlopen met behulp van itertuples() en waarden wilt wijzigen, moet u naar het DataFrame verwijzen met het kenmerk at en de index van de tuple. Dit kenmerk werkt op vrijwel dezelfde manier als loc. Het volgende voorbeeld illustreert het verschil tussen iterrows() en itertuples():

import pandas
df = pandas.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'], 
    'Age': [25, 30, 35], 
    'Income ': [70000.0, 80000.5, 90000.3]
})
for index, row in df.iterrows():
        row['Income'] += 1000
        print(f"Index: {index}, Age: {row['Age']}, Income: {row['Income']}")
for tup in df.itertuples():
        df.at[tup.Index, 'Income'] += 1000 # Change value directly in the DataFrame using at[] 
       print(f “Index: {tup.Index}, Age: {tup.Age}, Income: {df.loc[tup.Index, 'Income']}”)
# Both loops have the same output
python
Ga naar hoofdmenu