Hoe isoleer ik waarden uit een CSV bestand in Python

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Jokiehints
  • Registratie: Februari 2019
  • Laatst online: 02-04-2024
Mijn vraag

Ik gebruik de volgende code: Python 3.7.2
Python:
1
2
3
4
5
6
7
import csv
filename = 'nummer.csv'
with open(filename, newline = '') as file_object:
    csvreader = csv.reader(file_object, delimiter = ';', dialect='excel')
    for row in csvreader:
        a = (row)
        print(a)


en krijg het volgende resultaat:
['vnaam', 'anaam', 'dnaam_1', 'dnaam_2', 'dnaam_3', 'geb_dag', 'geb_mnd', 'geb_jr']
['2', '5', '5', '5', '33', '1', '1', '9']
['3', '4', '2', '11', '10', '22', '6', '8']


Ik ben een beginner. Ik wil een specifieke waarde uit dit CSV overzicht halen: bijvoorbeeld alleen de waarde op de tweede regel: de waarde 33. Dit zonder header. Ik wil deze waarde aan een variabele toekennen en verder gebruiken.

Het lukt mij echter niet dit voor elkaar te krijgen, wat ik ook probeer. Ik ben nu het spoor bijster.
Wie kan mij hierbij helpen?

Alvast ontzettend bedankt voor uw reactie


...

[ Voor 14% gewijzigd door RobIII op 08-02-2019 01:02 . Reden: Code tags toegevoegd; wil je dit voortaan zelf doen? ]

Beste antwoord (via Jokiehints op 08-02-2019 17:09)


  • Room42
  • Registratie: September 2001
  • Niet online
Zet je code even tussen [code=python]-tags, dan blijft de indenting in orde.
Python:
1
2
3
4
5
6
7
import csv
filename = 'nummer.csv'
with open(filename, newline = '') as file_object:
    csvreader = csv.reader(file_object, delimiter = ';', dialect='excel')
    for row in csvreader:
        a = (row)
        print(a)


Je kunt csv.dictreader gebruiken, dan kun je alle kolommen ook netjes bij naam pakken. Hier het voorbeeld uit de documentatie:
Python:
1
2
3
4
5
import csv
with open('names.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(row['first_name'], row['last_name'])

Output:
code:
1
2
3
Baked Beans
Lovely Spam
Wonderful Spam


In jouw geval zoek je dan dus row['dnaam_3'].

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Zet je code even tussen [code=python]-tags, dan blijft de indenting in orde.
Python:
1
2
3
4
5
6
7
import csv
filename = 'nummer.csv'
with open(filename, newline = '') as file_object:
    csvreader = csv.reader(file_object, delimiter = ';', dialect='excel')
    for row in csvreader:
        a = (row)
        print(a)


Je kunt csv.dictreader gebruiken, dan kun je alle kolommen ook netjes bij naam pakken. Hier het voorbeeld uit de documentatie:
Python:
1
2
3
4
5
import csv
with open('names.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(row['first_name'], row['last_name'])

Output:
code:
1
2
3
Baked Beans
Lovely Spam
Wonderful Spam


In jouw geval zoek je dan dus row['dnaam_3'].

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • matk89
  • Registratie: Oktober 2005
  • Laatst online: 16:10
Ik zou zoiets doen:

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pandas as pd
filename = 'nummer.csv'
dataframe = pd.read_csv(filename)

desired_variable = dataframe.loc[1, 'dnaam_3']

print(desired_variable)

# Als je je header om 1 of andere reden wilt negeren kun je dit doen:

dataframe = pd.read_csv(filename, header=None)

desired_variable = dataframe.loc[1, 4]

print(desired_variable)

Acties:
  • 0 Henk 'm!

  • Daedalus
  • Registratie: Mei 2002
  • Niet online

Daedalus

Moderator Apple Talk

Keep tryin'

matk89 schreef op donderdag 7 februari 2019 @ 23:48:
Ik zou zoiets doen:

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pandas as pd
filename = 'nummer.csv'
dataframe = pd.read_csv(filename)

desired_variable = dataframe.loc[1, 'dnaam_3']

print(desired_variable)

# Als je je header om 1 of andere reden wilt negeren kun je dit doen:

dataframe = pd.read_csv(filename, header=None)

desired_variable = dataframe.loc[1, 4]

print(desired_variable)
Dat is wel met een kanon op een mug schieten als je het ook prima met de standaard library kunt oplossen. Pandas is erg handig als je nog verdere data analysis wilt gaan doen, maar dat lijkt hier niet het doel te zijn.

“You know what I've noticed Hobbes? Things don't bug you if you don't think about them. So from now on, I simply won't think about anything I don't like, and I'll be happy all the time!” | 宇多田ヒカル \o/


Acties:
  • 0 Henk 'm!

  • matk89
  • Registratie: Oktober 2005
  • Laatst online: 16:10
Goed punt.
Ik heb het vaak nodig voor grote operaties. Het zit er inmiddels zo in dat ik het ook pak voor dit soort kleine zaken, zeker als performance niet een criterium is.

Dit soort huiswerk-achtige vragen is het misschien wat overkill inderdaad :)

Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
@matk89 7 @Room42 Sowieso stellen we 't hier op prijs als we niet meteen de oplossing op een zilveren presenteerblaadje aanreiken ;)
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.
Als je alleen maar code dumpt zonder uitleg over 't hoe en waarom, wat moet TS daar dan van opsteken? ;) (Niet dat de oplossing geven mét uitleg nou zo goed is, maar daar heeft TS iig méér aan ;) )

@Jokiehints Wil je voortaan code tags gebruiken wanneer je code post en, vooral, wanneer je een topic opent even onze Quickstart er langs leggen? Zoals je zult lezen verwachten we wel een beetje meer eigen inzet en in je topicstart terug te lezen wat je zélf al gezocht, gevonden, geprobeerd en ondernomen hebt. We zijn hier geen afhaalchinees ;)

[ Voor 74% gewijzigd door RobIII op 08-02-2019 01:03 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
@RobIII Wat heeft hij dan aan mijn oplossing? Dit noem ik verre van een zilveren presenteerblaadje. Als je mijn posthistory checkt doe ik altijd mijn best om mensen te prikkelen zelf verder onderzoek te doen. Ik wijs in mijn post enkel naar de documentatie (met wat quotes daaruit). Hierna zal hij zelf de loop en oplossing moeten vinden om te doen wat ie nodig heeft met zijn variabele.

Dus ik denk dat dit meer een duwtje in de juiste richting is dan het probleem volledig oplossen. ;)
Het alternatief was een linkje naar Google geweest (zoeken bij google naar 'csv.reader skip header') :P

[ Voor 14% gewijzigd door Room42 op 08-02-2019 11:07 ]

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Room42 schreef op vrijdag 8 februari 2019 @ 11:04:
@RobIII Wat heeft hij dan aan mijn oplossing? Dit noem ik verre van een zilveren presenteerblaadje.
Naja, je zegt het zelf al een beetje "Ik wijs in mijn post enkel naar de documentatie (met wat quotes daaruit)". Je post bestaat uit 3 blokken code, een tip om code tags te gebruiken en dan nog 1 zin tekst waarin je linkt naar de documentatie.Het is, inderdaad in jouw geval, geen kant-en-klare oplossing noch een zilveren presenteerblaadje, maar écht iets uitleggen doe je ook niet. Maar, having said that, héél veel is er ook niet echt aan uit te leggen, dus daar heb je wel een punt.

[ Voor 19% gewijzigd door RobIII op 08-02-2019 11:24 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Jokiehints
  • Registratie: Februari 2019
  • Laatst online: 02-04-2024
@RobIII bil
Staan er ergens voorbeelden van het correct plaatsen van de 'code tags'. Ik heb net getracht een vraag te posten, maar drukte te snel op versturen en in het resultaat staat wel de [code=python] maar de tekst is niet opgesteld zoals het hoort. Ik wil voorkomen dat ik een slechte reputatie krijg op het forum. Wil je mij helpen?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
@Jokiehints
Alleereerst is mijn naam RobIII en niet Robill o.i.d. (zie de ondertitel ;) ) :P

Als je doelt op dit topic dan heb je geen [code=python] tag gebruikt maar [code=language,line,tabwidth,filename] wat rechtstreeks uit de documentatie komt en waarbij je dus language, line, tabwidth en filename dient te vervangen door eigen waardes...

Zo geeft een [code=python,10,4,helloworld.py]:
Python: helloworld.py
10
11
12
13
x = 1
if x == 1:
    # indented four spaces
    print("Hello world")

Maar je hebt voldoende aan een [code=python]:
Python:
1
2
3
4
x = 1
if x == 1:
    # indented four spaces
    print("Hello world")

De reden waarom 't er bij jou niet goed uit ziet is omdat je de code tag wel "opent" ([code=python]) maar verderop niet "sluit" ([/code]) als volgt:

[code=python]
...je code hier...
[/code]

Tot slot: je kunt je bericht, als je te vlug op 'verstuur' hebt gedrukt, naderhand gewoon aanpassen door op de 'wijzigen' link rechtsbovenaan dat bericht te klikken.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Jokiehints
  • Registratie: Februari 2019
  • Laatst online: 02-04-2024
@RobIII
Bedankt. Hier kan ik verder mee. Fijn dat je wat compassie hebt met beginners op dit vlak. Het forum en de specifieke gebruiken zal ik mij z.s.m. eigen maken, zodat dit soort beginners fouten tot het verleden behoren.
Pagina: 1