Toon posts:

CSV verwerken

Pagina: 1
Acties:

Onderwerpen

Vraag


  • Siebelef55
  • Registratie: Januari 2016
  • Laatst online: 27-04-2021
dag iedereen,
Ik ben met een python-opdracht bezig.
Ik heb een CSV bestand met volgende gegevens: soort_grond;categorie;id_gemeente;gemeente;id_arrondissement;arrondissement;id_provincie;provincie;aantal_percelen;belastbare_oppervlakte_ha;niet_belastbare_oppervlakte;totale_opp_ha;belastbaar_kadastraal_inkomen;niet_belastbaar_kadastraal_inkomen;totaal_belastbaar_inkomen;
Nu wil ik dat wanneer ik een id_arrondissement invoer dat de som van alle belastbaar_kadastral_inkomens geprint wordt.

Wat ik dus wou doen is id_arrondissement als input vragen.
Dan zou ik willen dat alle belastbaar_kadastraal_inkomens met die id in een list gezet worden maar ik heb geen idee hoe ik dit zou moeten aanpakken.
Of als iemand een andere methode logischer vind is dat ook welkom.

Wat ik al geprobeerd heb?
Om eerlijk te zijn kom ik voorlopig niet verder dan het importeren van het CSV bestand. Ik mis een aanzet.

Alvast bedankt

[Voor 8% gewijzigd door Siebelef55 op 02-11-2018 11:47]

Alle reacties


  • Teeno
  • Registratie: Juni 2007
  • Laatst online: 22-05 15:49
Geen ervaring met Python, maar ik zou een variabele "totaal" definieren met waarde 0, tijdens het parsen van je CSV bepaal je voor elke regel of het id overeenkomt met jouw input, zoja dan tel je de waarde uit belastbaar_kadastral_inkomens op bij je variabele. Na de verwerking van je CSV zal dit dan de som zijn van alle belastbaar_kadastral_inkomens waar id_arrondissement = input.

  • Puch-Maxi
  • Registratie: December 2003
  • Laatst online: 11:08
In Python kun je CSV-bestanden bijvoorbeeld met https://docs.python.org/3/library/csv.html inlezen. Vervolgens moet je nog wel een structuur bedenken voor je "database", bijvoorbeeld een dictionary met daarin lijsten. Als je CSV-bestand heel erg groot is, dan werkt dit niet zo handig. In dat geval zou je er een relationele database van kunnen bakken (SQL). Daar kun je vervolgens ook weer tegen praten met Python :).
edit:
Ik zie nu dat het importeren van de CSV al wel is gelukt.

[Voor 7% gewijzigd door Puch-Maxi op 02-11-2018 12:12]

My favorite programming language is solder.


  • Siebelef55
  • Registratie: Januari 2016
  • Laatst online: 27-04-2021
Ik ga alvast aan de slag met jullie tips. Als het gelukt is of als ik vast zit laat ik het weten.

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 01:44

The Eagle

I wear my sunglasses at night

Leesvoer: http://www.cin.ufpe.br/~e...for%20Data%20Analysis.pdf

Al je daar niet verder mee komt weet ik het ook niet meer ;)

[Voor 35% gewijzigd door The Eagle op 02-11-2018 13:23]

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Siebelef55 schreef op vrijdag 2 november 2018 @ 11:34:
soort_grond;categorie;id_gemeente;gemeente;id_arrondissement;arrondissement;id_provincie;provincie;aantal_percelen;belastbare_oppervlakte_ha;niet_belastbare_oppervlakte;totale_opp_ha;belastbaar_kadastraal_inkomen;niet_belastbaar_kadastraal_inkomen;totaal_belastbaar_inkomen;
punt-komma is niet de standaard CSV delimiter, dat is een komma.
Komt de CSV soms uit Microsoft Excel? Dan moet je met wat meer dingen rekening houden...

Maak je niet druk, dat doet de compressor maar


  • Siebelef55
  • Registratie: Januari 2016
  • Laatst online: 27-04-2021
ik heb delimiter ';' gekozen. dus dat zou geen probleem mogen zijn

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

DJMaze schreef op vrijdag 2 november 2018 @ 13:37:
[...]

punt-komma is niet de standaard CSV delimiter, dat is een komma.
Komt de CSV soms uit Microsoft Excel? Dan moet je met wat meer dingen rekening houden...
CSV is een hele vage standaard (althans: Veel implementaties voldoen niet aan de standaard) en afhankelijk van de implementatie kan de delimeter variëren (komma, puntkomma, tab, etc). Ik geloof dat Excel voor de delimeter naar de regional settings kijkt. Dus puntkomma is een prima delimeter als dat toevallig de standaard is die jouw software volgt.

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 01:44

The Eagle

I wear my sunglasses at night

Even voor de goede orde: het ie CHARACTER Separated Value, niet Comma Separated. Dat Excel toevallig een komma gebruikt en mensen het dus zo zijn geen zien doet niets af aan waar het voor staat. Zelfs al jij een gecombineerde string als :;(€)567)(€ wilt gebruiken dan is het nog steeds een csv. Al snij je jezelf dan ws wel in de vingers :P

Voor een eerste aanzet: pak de eerste hit op google eens ;)
https://stackoverflow.com...rom-a-text-file-in-python

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

The Eagle schreef op zondag 4 november 2018 @ 10:44:
Even voor de goede orde: het ie CHARACTER Separated Value, niet Comma Separated.
Dat is dan sinds kort. Ik ben die term niet eerder tegen gekomen. Pas jij het Wikipedia artikel even aan?

  • Merethil
  • Registratie: December 2008
  • Laatst online: 07:10
downtime schreef op zondag 4 november 2018 @ 10:51:
[...]

Dat is dan sinds kort. Ik ben die term niet eerder tegen gekomen. Pas jij het Wikipedia artikel even aan?
Van Wikipedia:
In addition, the term "CSV" also denotes some closely related delimiter-separated formats that use different field delimiters. These include tab-separated values and space-separated values. A delimiter that is not present in the field data (such as tab) keeps the format parsing simple. These alternate delimiter-separated files are often even given a .csv extension despite the use of a non-comma field separator. This loose terminology can cause problems in data exchange. Many applications that accept CSV files have options to select the delimiter character and the quotation character.
Je ziet dus dat CSV's zowel op comma als character kunnen slaan, maar de oorspronkelijke term was inderdaad Comma Separated Value. Het is echter over de jaren heen veel meer Character Separated Value geworden door implementaties in grote systemen. De naam verandert echter niet, maar om nou zo mierenneukerig daarover te doen is niet nodig imo.

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 07:29
Ik zou zeggen; kijk eens naar het pandas package. Biedt een eenvoudige functie om CSV in te lezen die een data frame terug geeft. Dit data frame is als een Excel sheet met kolommen en rijen.

Verder kun je er SQL achtige functies als groupby op loslaten om heel makkelijk aggregaten te maken. In de pandas documentatie vind je zat voorbeelden!

[Voor 7% gewijzigd door Morrar op 04-11-2018 16:58]


  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 01:44

The Eagle

I wear my sunglasses at night

downtime schreef op zondag 4 november 2018 @ 10:51:
[...]

Dat is dan sinds kort. Ik ben die term niet eerder tegen gekomen. Pas jij het Wikipedia artikel even aan?
Ik verkies mijn eigen kennis, ervaring en verstand boven wikipedia, mag dat? :)
Wikipedia als betrouwbare bron aanmerken...prima, maar het is de Enceclopedia Britannica niet zeg maar ;)

En dat Big Data mijn vakgebied is helpt ook ;)

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • DJMaze
  • Registratie: Juni 2002
  • Niet online
downtime schreef op zondag 4 november 2018 @ 10:15:
CSV is een hele vage standaard (althans: Veel implementaties voldoen niet aan de standaard)
The Eagle schreef op zondag 4 november 2018 @ 10:44:
Even voor de goede orde: het ie CHARACTER Separated Value, niet Comma Separated.
The Eagle schreef op zondag 4 november 2018 @ 20:10:
Ik verkies mijn eigen kennis, ervaring en verstand boven wikipedia, mag dat? :)
Wikipedia als betrouwbare bron aanmerken...prima, maar het is de Enceclopedia Britannica niet zeg maar ;)

En dat Big Data mijn vakgebied is helpt ook ;)
Ook al is "big data" je vak, knikker je een linkje naar Wikipedia online, of roeptoeter je dat Microsoft gelijk heeft.
Dan mag je HTTP en je PC weggooien want dan heb je blijkbaar nog nooit gehoord van IETF RFC.

Zo ja, dan kan je hier lezen over het "comma separated values" formaat: https://tools.ietf.org/html/rfc4180
En daar kom je via een link ook bij DSV (Delimiter-Separated Values).

[Voor 4% gewijzigd door DJMaze op 05-11-2018 10:09]

Maak je niet druk, dat doet de compressor maar


  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 01:44

The Eagle

I wear my sunglasses at night

I hear you :)
In 2005 heeft iemand geroepen dat csv stond voor comma separated....inmiddels zijn we 13 jaar verder en is csv defacto een character separated value geworden. Weliswaar niet zo beschreven (logisch, want een komma is zo specifiek dat je die standaard zomaar aan kunt passen) maar wordt wel zo gebruikt.
Als ik hier een willekeurige data engineer vraag of ie een csv wil opleveren kwijg ik ook de vraag welke separator ik wil ;)

Ik zeg let's agree to disagree :)

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • ThomasG
  • Registratie: Juni 2006
  • Laatst online: 28-05 23:12
The Eagle schreef op maandag 5 november 2018 @ 10:24:
I hear you :)
In 2005 heeft iemand geroepen dat csv stond voor comma separated....inmiddels zijn we 13 jaar verder en is csv defacto een character separated value geworden. Weliswaar niet zo beschreven (logisch, want een komma is zo specifiek dat je die standaard zomaar aan kunt passen) maar wordt wel zo gebruikt.
Als ik hier een willekeurige data engineer vraag of ie een csv wil opleveren kwijg ik ook de vraag welke separator ik wil ;)

Ik zeg let's agree to disagree :)
Het is heel simpel. Volgens de RFC 4180 staat CSV voor Comma-Separated Values. Strict genomen is het al andere dus fout. Het probleme is ontstaan doordat er veel crappy parsers waren die quotes niet snapte, en je dus problemen kreeg met comma's in teksten en getallen waardoor ze andere separators zijn gaan gebruiken :') Aan de andere kant was quotes voor getallen ook niet handig, en had SSV (Selicolon-Separated Values) beter geweest.

  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-05 12:13
ThomasG schreef op maandag 5 november 2018 @ 10:45:
Het probleme is ontstaan doordat er veel crappy parsers waren die quotes niet snapte
Het probleem is vooral ontstaan door slechte onervaren developers die, in plaats van gewoon een library te gebruiken, denken weg te komen met String.split en als dan blijkt dat dat niet werkt maar hun eigen parser gaan schrijven. Vrijwel altijd een kwestie van NIH ;)

https://niels.nu


  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 07:29
Leuke discussie, maar wellicht is de TS hier niet echt mee geholpen :P

Zou de TS nogmaals willen aanraden pandas te pakken:
https://pandas.pydata.org...ated/pandas.read_csv.html

En om som over aggregaat te berekenen:
https://pandas.pydata.org...as.DataFrame.groupby.html

En tot slot loc om een waarde te selecteren:
https://pandas.pydata.org...pandas.DataFrame.loc.html

Voorbeeld:
Python:
1
2
3
4
5
6
7
8
9
10
import pandas as pd

# Read CSV
df = pd.read_csv("filename.csv")

# Aggregated sum by ID
df_grp = df.groupby("id_arrondissement").agg({"belastbaar_kadastraal_inkomen": "sum"})

# Waarde selecteren voor ID = 1
selected = df_grp.loc[1, "belastbaar_kadastraal_inkomen"]


Of iets van die strekking... Veel envoudiger wordt het niet :)

[Voor 101% gewijzigd door Morrar op 05-11-2018 22:30]


  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

ThomasG schreef op maandag 5 november 2018 @ 10:45:
[...]
Het is heel simpel. Volgens de RFC 4180 staat CSV voor Comma-Separated Values. Strict genomen is het al andere dus fout. Het probleme is ontstaan doordat er veel crappy parsers waren die quotes niet snapte, en je dus problemen kreeg met comma's in teksten en getallen waardoor ze andere separators zijn gaan gebruiken
Het probleem is ontstaan omdat men achteraf een RFC heeft verzonnen voor een bestandsformaat wat al decennia bestaat en waar altijd al een boel verschillende interpretaties van waren. Die RFC is daardoor nutteloos en waardeloos. Want als je nu een CSV tegenkomt weet je nog altijd niet aan welke standaard die voldoet.

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 01:44

The Eagle

I wear my sunglasses at night

Aan geen enkele. Al was het simpelweg maar omdat ik ook gewoon iets een csv kan noemen maar de inhoud net zo goed een gecomprimeerde versie van een jpeg kan zijn, om maar eens wat te noemen.

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • Siebelef55
  • Registratie: Januari 2016
  • Laatst online: 27-04-2021
Ik ben ondertussen tot een oplossing gekomen.

def landgebruikdata():

with open('landgebruik_2015.csv', encoding='latin-1') as csvfile:
readCSV = csv.DictReader(csvfile, delimiter=';')
return list(readCSV)


def belastbaarKadastraalInkomen(id_arrondissement):

datalijst = landgebruikdata()

belastbaarkadastraalinkomen = 0
for row in datalijst:

if int(row['id_arrondissement']) == id_arrondissement: #als het id_arrondissement in csv overeenkomt met ingevoerde waarde

belastbaarkadastraalinkomen += float(row['belastbaar_kadastraal_inkomen'])


return belastbaarkadastraalinkomen


Dus bedankt voor alle tips
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee