Seite 1 von 1

Arrays bearbeiten mit numpy

Verfasst: Freitag 21. Oktober 2022, 12:07
von vinc00
Hallo zusammen,

ich habe folgendes Problem.
Ich soll eine CSV datei bearbeiten, die grundsätzlich zwei Spalten mit X und Y Werten hat.
Die X-Werte sind immer in 0,0025er Schritten.
Es kommt vor, dass die Y Werte in manchen Zeilen leer sind. Diese Zeilen sollen gelöscht werden.
Dann kann es sein, dass es Zeilen gibt wo die X-Werte einen größeren Schritt als 0,0025 machen. Wenn folgendes gilt, 0.0005 < X-Wert % 0.0025 < 0.9995, soll die Zeile gelöscht werden.
Dann müssen der erste und letzte Y-Wert verglichen werden. Wenn der erste Wert größer ist als der letzte, soll es so bleiben, falls nicht, muss die Tabelle einmal umgedreht werden.
Und als letztes müssen die X-Werte ersetzt werden, durch eine neue Zählung die bei 0 beginnt und dann mit 0,0025er Schritten fortführt.

Meine Lösung dafür sieht wie folgt aus:

def loadCSV(path, filename):
data = np.loadtxt(path + "/" + filename, dtype = float, delimiter = ';', skiprows = 1, usecols = [0, 1])
#in Data wird die 1. und 2. Spalte der CSV Datei geladen (Zählung beginnt bei 0)
return data[:]

def prep(data):
length = len(data)
for i in range(0, length, 1):
if 0.0005 < data[i, 0]%0.0025 < 0.9995:
del data[i, 0]
del data[i, 1]

length = len(data)
for i in range(0, length, 1):
if data[i, 1] == "":
del data[i, 0]
del data[i, 1]

length = len(data)
if data[0, 1] < data[length, 1]:
data=np.flipup(data)

data[0, 0] = 0
for i in range(1, length, 1):
j=i-1
data[i, 0] = 0.0025+data[j, 0]
return data



Wenn ich das allerdings benutzte kommt folgender Fehler:

ValueError: could not convert string to float: ' '

und dann verweist er mich auf:

def_getconv(dtype):

def floatconv(x):
x.lower()
if '0x' in x:
return float.fromhex(x)
return float(x)


Kann mir da vielleicht jemand weiter helfen?

Gruß
vinc00

Re: Arrays bearbeiten mit numpy

Verfasst: Freitag 21. Oktober 2022, 19:34
von Sirius3
Der Fehler kommt daher, das loadtxt eben Zahlen erwartet, aber man Zeilen laut Aufgabenbeschreibung leer sind.

Zum restlichen Code: wenn man bei Numpy Schleifen benutzt, dann macht man etwas falsch.Alle Teile der Aufgabe lassen sich ohne for lösen.
del wird mit einem Array auch nicht funktionieren.
Programme entwickelt man Stück für Stücke und schreibt nicht so viele Zeilen, die nicht funktionieren, ohne sie getestet zu haben.

Re: Arrays bearbeiten mit numpy

Verfasst: Mittwoch 26. Oktober 2022, 13:04
von vinc00
Wie kann ich denn die for Schleifen umgehen?

Re: Arrays bearbeiten mit numpy

Verfasst: Mittwoch 26. Oktober 2022, 14:29
von noisefloor
Hallo,

wenn du mittels Index über eine Datrenstruktur wie eine Liste oder einen Numpy Array iterierst (was man normalerweise nicht macht, weil man in Python i.d.R. direkt über die Daten iterieren kann), dann darfst du beim iterieren auf keine Fall Elemente auf der Liste / dem Array löschen, weil du dann in einen IndexError läufst. Beispiel:

Code: Alles auswählen

>>> data = [1, 2, 3, 4, 5]
>>> l = len(data)
>>> for i in range(0, l):
...     if i==3:
...        del data[i]
...     else:
...         print(data[i])
...
1
2
3
Traceback (most recent call last):
  File "<stdin>", line 5, in <module>
IndexError: list index out of range
>>>
Aber wenn du über `data` iterieren musst, dann sowieso so:

Code: Alles auswählen

...
for element in data:
    print(element) #oder was auch immer
...
Gruß, noisefloor

Re: Arrays bearbeiten mit numpy

Verfasst: Mittwoch 26. Oktober 2022, 14:47
von vinc00
Ok, das probiere ich mal vielen Dank!

Re: Arrays bearbeiten mit numpy

Verfasst: Mittwoch 26. Oktober 2022, 14:54
von Sirius3
@vinc00: die selbe Frage hast Du ja hier nochmal gestellt: viewtopic.php?t=55709
Und dort hast Du auch eine passende Antwort bekommen.