Seite 1 von 1

CSV Spalten in Array einlesen

Verfasst: Montag 17. Dezember 2018, 19:01
von Kahnbein.Kai
Guten Abend,
ich möchte mir das Leben vereinfachen und ein kleinen Python Programm schreiben. Dieses soll Spalten aus einer CSV-Datei in ein Array speichern um damit hinterher z. B. die Summe berechnen zu können.
Um nicht immer mit der riesigen CSV Datei zu arbeiten habe ich mir eine kleine selbst erzeugt.

Code: Alles auswählen

Test_Array = [2,5,7,10,15,32]

#print(Test_Array[0])
#print(Test_Array[1])
#print(Test_Array[2])
#print(Test_Array[3])
#print(Test_Array[4])


Tab = open(r"C:\Test.csv",'w')

for i in range(0,6):
    #print(i)
    Tab.write("%i;%i\n"%(i,Test_Array[i]))
    

Tab.close()

Tab = open(r"C:\Test.csv",'r')


lines=Tab.readlines()

for i in lines:
    print(i)

sum=0

for line in lines:
    entries = [e.strip() for e in line.split(';')]
    S1 = entries[0]
    S2 = entries[1]
    
    for i in range(1,4):
        sum = S1[i] + S1[i-1]

    print(sum)
    

Raus kommt eine CSV Datei wie folgt Bild
Wie kann ich die Spalte A in einem eigenen Array Speichern z. B. A=[0,1,2,3,4,5] ?

Ich stehe total auf dem Schlauch.

Gruß Kai

Re: CSV Spalten in Array einlesen

Verfasst: Montag 17. Dezember 2018, 19:19
von Sirius3
Zuerst einmal mußt Du das eingelesene in eine Zahl umwandeln und diese dann zu `sum` addieren.
Einfacher geht das mit numpy:

Code: Alles auswählen

entries = numpy.genfromtxt("test.csv", delimiter=";")
print(entries.sum(axis=0))

Re: CSV Spalten in Array einlesen

Verfasst: Montag 17. Dezember 2018, 19:26
von ThomasL
und wenn du die Daten professionell analysieren willst ist https://pandas.pydata.org sehr hilfreich

Re: CSV Spalten in Array einlesen

Verfasst: Montag 17. Dezember 2018, 19:28
von Kahnbein.Kai
ohh Ok, Danke, numpy hatte ich damals gar nicht im Studium. Ich werde mich mal einlesen !
Das ist nur die Vorbereitung für die richtige Tabelle, da wollte ich z. B. 5 Minuten Summenwerte oder Summentageswerte errechnen, ist das mit numpy auch möglich ?
Nur aus interesse, wie speicher ist die erste Spalte in einem Array, das war doch gar nicht so schwer ?!

Gruß

@ThomasL, Danke für den Link, auch pydata kenn ich noch nicht ;)

Re: CSV Spalten in Array einlesen

Verfasst: Montag 17. Dezember 2018, 19:50
von ThomasL
In deinem Code sind einige Fehler, ich habe ihn mal so umgebaut, dass er läuft.
Mit numpy und pandas kann man wesentlicher eleganter mit Spalten und Zeilen arbeiten.

Code: Alles auswählen

test_array = [2, 5, 7, 10, 15, 32]

with open("test.csv", 'w') as datei:
    for i in range(0, 6):
        datei.write("%i;%i\n"%(i, test_array[i]))

with open("test.csv", 'r') as datei:
    lines = datei.readlines()

spalte_a = []
spalte_b = []

for line in lines:
    spalten = [int(element) for element in line.strip().split(';')]
    print(spalten)
    spalte_a.append(spalten[0])
    spalte_b.append(spalten[1])

print(sum(spalte_a), sum(spalte_b))

Re: CSV Spalten in Array einlesen

Verfasst: Montag 17. Dezember 2018, 19:54
von Kahnbein.Kai
@ TomasL und Sirius3
Danke für eure schnelle Hilfe, ich werde mir numpy, pandas und pydata anschauen und versuchen das damit zu schaffen.
Ich habe es auch geschafft, nicht schön aber selten. ;)

Code: Alles auswählen

Test_Array = [2,5,7,10,15,32]

#print(Test_Array[0])
#print(Test_Array[1])
#print(Test_Array[2])
#print(Test_Array[3])
#print(Test_Array[4])


Tab = open(r"C:\Test.csv",'w')

for i in range(0,6):
    #print(i)
    Tab.write("%i;%i\n"%(i,Test_Array[i]))
    

Tab.close()

Tab = open(r"C:\Test.csv",'r')


lines=Tab.readlines()

for i in lines:
    print(i)

sum=0

#print(lines[2])

A=[0]*len(lines)

print(len(lines))
print(A)

i=0

for line in lines:
    entries = [e.strip() for e in line.split(';')]
    A[i]=entries[0]
    i=i+1
    
print(A)
Schönen Abend noch
Kai

Re: CSV Spalten in Array einlesen

Verfasst: Montag 17. Dezember 2018, 19:59
von ThomasL
Mit pandas ginge das z.B. so einfach:

Code: Alles auswählen

import pandas as pd
data = pd.read_csv('test.csv', delimiter=';', names=['spalte1', 'spalte2'])
print(data.head(10)) # zeige die ersten 10 Reihen
print(data.describe()) # zeige eine Analyse der Daten
print(data.spalte1.sum(), data.spalte2.sum()) # Die Summen der Spalten

Re: CSV Spalten in Array einlesen

Verfasst: Montag 17. Dezember 2018, 20:01
von Sirius3
Wenn man zu Listelementen auch noch den Index braucht, benutzt man `enumerate`. Statt erst die Datei komplett zu lesen und danach die Zeilen durchzugehen, macht man das in einem Schritt. `S1` und `S2` hast Du ja schon für jede Zeile extrahiert, es fehlt nur noch das Hinzufügen zu einer Liste mit append, statt die Liste mit 0 vorzubelegen.

Code: Alles auswählen

test_array = [2, 5, 7, 10, 15, 32]

with open("test.csv", "w") as output:
    for idx, value in enumerate(test_array):
        output.write("%i;%i\n"%(idx, value))

spalte1, spalte2 = [], []
with open("test.csv") as lines:
    for line in lines:
        a, b = map(int, line.split(';'))
        spalte1.append(a)
        spalte2.append(b)
print(sum(spalte1))