Arrays bearbeiten mit numpy
Verfasst: Freitag 21. Oktober 2022, 12:07
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
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