CSV staat voor comma separated values (oftewel: een bestand met door comma's gescheiden waardes). Vraag jij je af wat een CSV-bestand precies is en hoe je met CSV bestanden werkt binnen Python? Na het lezen van deze pagina ken je de meestgebruikte mogelijkheden die er zijn.
In dit artikel behandelen we de volgende onderwerpen:
- Wat is een CSV-bestand?
- CSV-bestanden openen met de standaard Python csv module
- CSV-bestanden schrijven met de standaard Python csv module
- CSV-bestanden openen met Pandas
- CSV-bestanden schrijven met Pandas
Wat is een CSV-bestand?
Een CSV-bestand is het meestgebruikte bestandstype voor imports en exports van spreadsheets en databases. Als data scientist heb je vaak met dit bestandstype te maken. Het bestandstype werd al jaren gebruikt voordat men probeerde een uniforme standaard te zetten voor CSVs. Hierdoor zijn er redelijk wat subtiele verschillen ontstaan in het gebruik van CSV bestanden. Het kan daarom wat frustratie opwekken als je een CSV bestand gegenereerd door het ene programma niet wil laden in een ander programma.
Een CSV-bestand kan er als volgt uitzien:
voornaam,achternaam,leeftijd,snapt_csvs
Henk,Jansen,52,ja
Anja,Groen,31,nee
Eigenschappen van een CSV-bestand
Een CSV-bestand heeft de volgende eigenschappen die in 2005 werden vastgelegd in rfc4180:
- Iedere regel bevat een individuele observatie, gevolgd door een regeleinde (enter)
- De laatste observatie mag met een regeleinde (enter) eindigen, maar dat hoeft niet
- De eerste regel van het CSV-bestand kan optioneel een header regel bevatten waarin column-namen worden gevat
- Iedere observatie bevat één of meerdere waarden gescheiden door comma's. De laatste waarde per regel wordt niet gevolgd door een comma
- Iedere regel bevat evenveel velden (ook lege waarden worden gescheiden door comma's)
- Spaties worden niet genegeerd
- Waarden kunnen zowel met als zonder aanhalingstekens worden opgenomen in een CSV-bestand
- Waarden die regeleindes (enters) in zich hebben moeten tussen dubbele aanhalingstekens staan
De comma is niet het enige scheidingsteken dat gebruikt wordt in de praktijk. Ook tabs, de dubbele punt, en de puntcomma worden gebruikt als scheidingstekens.
CSV-bestanden openen met de standaard Python csv module
Binnen de standaardinstallatie van Python heb je de csv module. Deze module maakt het mogelijk om CSV-bestanden te lezen en schrijven. Je importeert deze module met de code import csv
.
De module werkt standaard met CSV-bestanden gegenereerd door Excel (lees ook: Excel vs Python), maar heeft ook de mogelijkheden om om te gaan met CSV-bestanden met een andere opbouw.
import csv
with open('csv_voorbeeld.txt') as csv_bestand:
csv_ingelezen = csv.reader(csv_bestand, delimiter=',')
line_count = 0
for row in csv_ingelezen:
if line_count == 0:
print(f'Dit CSV-bestand bevat informatie over: {", ".join(row)}')
line_count += 1
else:
print(f'\t{row[0]} {row[1]} is {row[2]} jaar oud en antwoordt "{row[3]}" op de vraag "begrijp jij CSV-bestanden?".')
line_count += 1
Dit CSV-bestand bevat informatie over: voornaam, achternaam, leeftijd, snapt_csvs Henk Jansen is 52 jaar oud en antwoordt "ja" op de vraag "begrijp jij CSV-bestanden?". Anja Groen is 31 jaar oud en antwoordt "nee" op de vraag "begrijp jij CSV-bestanden?".
Het is ook mogelijk om iedere regel als een dictionary in te lezen met csv.DictReader
. De keys worden dan bepaald door de waarden in de header regel.
with open('csv_voorbeeld.txt', mode='r') as csv_bestand:
csv_reader = csv.DictReader(csv_bestand)
for row in csv_reader:
print(f'{row}')
{'voornaam': 'Henk', 'achternaam': 'Jansen', 'leeftijd': '52', 'snapt_csvs': 'ja'} {'voornaam': 'Anja', 'achternaam': 'Groen', 'leeftijd': '31', 'snapt_csvs': 'nee'}
CSV-bestanden schrijven met de standaard Python csv module
Het schrijven van CSV-bestanden is even simpel met de csv module in Python. Hier voegen we twee observaties toe aan ons voorbeeldbestand csv_voorbeeld.txt.
with open('csv_voorbeeld.txt', mode='a', newline='') as csv_bestand:
csv_schrijven = csv.writer(csv_bestand, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
csv_schrijven.writerow(['Dick', 'Daniels', '14', 'nee'])
csv_schrijven.writerow(['Eva', 'Miedema', '32', 'ja'])
Als quoting = csv.QUOTE_MINIMAL, dan zal Python alleen waarden tussen quote-characters zetten als de waarde het scheidingsteken bevat.
CSV-bestanden openen met Pandas
Het Pandas package is het meestgebruikte package voor data analyse binnen Python. Het package biedt ook de mogelijkheid om CSV-bestanden te openen en te schrijven.
Allereerst dient Pandas geïnstalleerd te worden.
Vervolgens lezen we het bestand in dat we eerder hebben gebruikt.
import pandas as pd
df = pd.read_csv('csv_voorbeeld.txt')
print(df)
voornaam achternaam leeftijd snapt_csvs 0 Henk Jansen 52 ja 1 Anja Groen 31 nee 2 Dick Daniels 14 nee 3 Eva Miedema 32 ja
Je kunt zien dat de code om een CSV-bestand in te lezen met Pandas erg simpel en overzichtelijk is, evenals de output. Pandas maakt een DataFrame van het bestand. Het DataFrame bevat automatisch de header waarden als column namen en Pandas heeft tevens index-nummers toegevoegd. D.m.v. verschillende parameters kun je zelf index- en column-namen kiezen.
CSV-bestanden schrijven met Pandas
Het schrijven naar CSV-bestanden vanuit Pandas kan met de code DataFrame.to_csv(). In onderstaand voorbeeld maken we een nieuw CSV-bestand waarbij we de index van het huidige DataFrame negeren.
df['afdeling'] = ['Marketing', 'HR', 'Financiën', 'Sales']
print(df)
df.to_csv('csv_voorbeeld_met_afdeling.csv', index=False)
voornaam achternaam leeftijd snapt_csvs afdeling 0 Henk Jansen 52 ja Marketing 1 Anja Groen 31 nee HR 2 Dick Daniels 14 nee Financiën 3 Eva Miedema 32 ja Sales
Je zult nu een nieuw gegenereerd CSV-bestand vinden in de map waar je je Python script uitvoert.
Wil je nog veel meer leren over met mogelijkheden met Python voor Data Science? Schrijf je dan in voor onze Python cursus voor data science, onze machine learning training, of voor onze data science opleiding en leer met vertrouwen te programmeren en analyseren in Python. Nadat je een van onze trainingen hebt gevolgd kun je zelfstandig verder aan de slag. Je kunt ook altijd even contact opnemen als je een vraag hebt.
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.