Aus einer csv Datei importierte Daten verarbeiten

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
maria0736
User
Beiträge: 1
Registriert: Samstag 10. Juli 2021, 14:16

Hallo zusammen!

Vorab - ich bin blutige Anfängerin. Ich habe untenstehende csv Datei und möchte ein Programm erstellen, welches anzeigt, welches die beste, zweit und drittbeste Option ist. Wenn das Kriterium zutrifft, soll die Punktzahl gezählt werden, und dann pro Option eine Gesamtpunktzahl ausgegeben werden. Die Originaltabelle ist umfangreicher, deswegen habe ich eine kleinere erstellt.
Bild

Ich weiß nicht so recht wie ich das ganze darstellen soll. Habe an eine Liste pro Zeile gedacht, in welcher die Zahlen dann eingetragen werden und am Ende addiert werden. Könnt ihr mir hier weiterhelfen?

Viele Grüße
Maria

Code: Alles auswählen

import csv

data = list()
file = open("test.csv","r")
for line in file:
    line = line.strip() 
    line_list = line.split(",") 
    data.append(line_list)
file.close()

ausgabeliste=[]

for i in range(len(data)):
	temp=[]
	for j in range(len(data[i])):
		if data[i][j] == data[0][j]:
			continue
		elif data[i][j] == data[1][j]:
			continue
		temp=[]
		temp.append(data[i][j])
		ausgabeliste.append(temp)
		print(data[i][j])

print(ausgabeliste)
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@maria0736,

Falls du mit viel mehr Daten als hier im Beispiel arbeiten willst, würde ich dir das Erweiterungspaket Pandas empfehlen.
Es ist wesentlich mächtiger.
https://pandas.pydata.org/

Falls es dich interessiert, kann man die hier bestimmt auch ein Beispiel in Pandas zeigen

Ich würde die Daten spaltenweise speichern. Dann ist die Überschrift zu den jeweiligen Daten in der Kopfzeile und die einzelnen Daten darunter angelegt.

Hier ist ein Beispiel wie ich es machen würde. Aber man kann das auf viele Wege lösen.
Die Kommentare helfen hoffentlich um es zu verstehen, sonst frag gerne nach.
(Voraussetzung, dass die Daten spaltenweise gespeichert sind, sonst funktioniert es nicht)

Code: Alles auswählen

import csv

ll_data = {}

with open("test.csv", "r") as csvfile:

    # csv reader erstellen
    reader = csv.reader(csvfile, delimiter=",")

    # Zeile für Zeile abarbeiten:
    for row in reader:

        if reader.line_num == 1:
            # in der ersten Zeile stehen die Überschriften.
            # Sie werden als Schlüssel für den Dictionary verwendet
            # Der Dictionary wird erstellt und für jede Überschrift eine leere Liste
            # für die Daten angelegt
            all_data = {heading:[] for heading in row}

            # jedes element der Zeile wird nach der Überschrift in
            # die dazugehörige Liste eingefügt
        for header, row_data in zip(all_data.values(), row):
            header.append(row_data)

# Aufsummieren der "True" Einträge aus jeder Spalte
# und Ausgabe
for option in ["Option A", "Option B", "Option C"]:
    option_sum = sum(1 if d=="True" else 0 for d in all_data[option])
    print(f"{option}:{option_sum:4}")
Ausgabe:

Code: Alles auswählen

Option A:   2
Option B:   1
Option C:   2
Noch ein paar Bemerkungen zu deinem Programm zur Verbesserung:

Dateien öffnen sollte man immer so:

Code: Alles auswählen

with open("test.csv", "r") as csvfile:
Dann kann man auch auf das close verzichten.

Du importierst das csv Modul verwendest es aber nicht. In meinem Beispiel siehst du wie gemacht werden sollte.

Beim Iterieren über Listen sollte man keinen Index verwenden sondern, direkt über die Liste iterieren.

Code: Alles auswählen

for name in ["Susi", "Robert", "Peter"]:
    print(name)
Antworten