Aus CSV Daten auslesen und Max bzw Min bestimmen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
TheLüddy
User
Beiträge: 20
Registriert: Freitag 27. April 2018, 10:17

Hallo liebes Forum, ich habe da ein gewisses Problem was die Extraktion und Verarbeitung von Daten angeht. Ich wollte aus einer CSV Datei einige Punkte auslesen und danach den Maximalwert berechnen, jedoch stosse ich dabei auf gewisse Probleme. Ich habe auch schon einiges zu diesem Thema gelesen, habe aber keine passende Antwort gefunden. Könnt Ihr mir helfen?

Anbei der Code:

Code: Alles auswählen

import csv

reader = list(csv.reader(open("specimen_1_data.csv")))
del reader[0]


for row in reader:
    print((row[1]))
Soweit bin ich gekommen, ich habe eine Spalte mit all meinen Werten, welche etwa 0.001-0.003 betragen (7 Nachkommastellen). Wie kann ich daraus mein Maximum rauslesen? Danke im Voraus!
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Das geht mit einer Liste und der max() Funktion.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Code: Alles auswählen

max(row[1] for row in reader)
TheLüddy
User
Beiträge: 20
Registriert: Freitag 27. April 2018, 10:17

Oh vielen Dank! Klappt fast problemfrei, ein kleines Problem wäre da aber noch. Nun gibt es mir den Maximalwert dies an:
5.25864e-17

Das sollte aber logischerweise das Minimum sein. Wie kann ich dies ändern?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@TheLüddy: wie soll jemand sagen, was das Maximum ist, wenn niemand die Zahlen kennt?
TheLüddy
User
Beiträge: 20
Registriert: Freitag 27. April 2018, 10:17

Ja hast schon recht, tut mir leid. alle anderen Zahlen sind so 0.0018993, 0.0019274, usw. und dann eben noch diese 5.25864e-17.
Ich denke dass Problem ist, dass 'e-17' ignoriert bzw nicht erkannt wird und somit das Programm 5.25864 als Maximum angibt.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann liest du die Zahl falsch ein, denn float kann das in Python:

Code: Alles auswählen

beer:Source deets$ python
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 12:54:16)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> float("5.25864e-17")
5.25864e-17
TheLüddy
User
Beiträge: 20
Registriert: Freitag 27. April 2018, 10:17

Kannst du mir sagen wo der Fehler liegt? Ich seh ihn nicht..

Code: Alles auswählen

import csv

reader = list(csv.reader(open("specimen_1_data.csv")))
del reader[0]

print("Der Maximalwert lautet: ", max(row[1] for row in reader))
print("Der Minimalwert lautet: ", min(row[1] for row in reader))
del reader[0] ist um die erste Zeile zu löschen welche nur Buchstaben und keine Zahlen hat.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du konvertiest ja nicht, sondern behandelst alles als strings. Du musst deine Werte schon mit float(...) in Fliesskommazahlen wandeln. Sonst werden die einfach lexikographisch sortiert.

Und noch ein Nachtrag: "reader" fuer die Liste der Werte ist ein sehr schlechter Name, weil es impliziert, dass dies der CSV-reader waere. Statt die Daten, die aus ihm gelesen wurden. Benenn das bessert "rows" oder "data_rows" oder so was aehnliches.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Und statt den Header mitzulesen um in danach wegzuwerfen, solltest Du ihn sofort ignorieren:

Code: Alles auswählen

with open("specimen_1_data.csv") as lines:
    reader = csv.reader()
    _ = next(reader) # ignore header
    values = list(reader) # hier fehlt noch das Umwandeln in floats.
Und am besten liest Du die Zahlen gleich mit numpy ein.
TheLüddy
User
Beiträge: 20
Registriert: Freitag 27. April 2018, 10:17

Jaa hat funktioniert :D Vielen Dank! Nehme mir deinen Tipp zu Herzen.
Antworten