ich möchte aus einer .csv-Datei eine Matrix (np.array) lesen und damit dann weiter arbeiten...Problem ist, dass ich manchmal bei den Dateien einen Header habe und manchmal nicht. Ich kann das nicht festlegen und muss es daher abfangen!
Bisher lese ich die Dateien wie folgt aus:
Code: Alles auswählen
datei=genfromtxt("%s"%datei_name, delimiter=',')
Wenn allerdings einen Header in der Datei habe, bekomme ich eine Fehlermeldung....
Mir ist auch völlig klar woher der Fehler kommt...Er liest ja den Header mit nur 2 columns, nach dem Header sind es halt mehr columns und dann kann dies nicht ordentlich in den array geschrieben werden....in genfromtxt
raise ValueError(errmsg)
ValueError: Some errors were detected !
Line #19 (got 100 columns instead of 2)
usw....
Den header kann ich ja wie folgt überspringen (in diesem Fall ist er 18 Zeilen lang):
Code: Alles auswählen
datei=genfromtxt("Test.csv", delimiter=',', skip_header=18)
Eine andere Methode geht über den csv reader, dies ist allerdings umständlich, da ich dann meine erhaltene Liste erst in einen Array und dann die einzelnen Einträge in Float umändern muss....(bei pandas ist das ja so wie ich es verstanden habe auch so):
Code: Alles auswählen
f = open("%s"%bennennung, "r")
reader=csv.reader(f, delimiter=",")
a = list()
for row in reader:
a.append(row)
f.close()
datei = np.array(a)
datei=datei.astype(float)
Meine Frage ist, ob ich das Thema irgendwie anders lösen kann, indem ich davor bestimme, ob die Datei nen Header hat oder nicht und sie dann mit "genfromtxt" auslesen kann. Dies wäre wesentlich komfortabler. Gibt es da was, was ich in der Doku von numpy.genfromtxt übersehen habe?
Meine einzige andere Idee wäre eben über den csv-Reader nur einen Teil auslesen zu lassen und zu bestimmen ob es ne Datei mit oder ohne Header ist und dann entsprechend mit genfromtxt einzulesen (und bei Bedarf den Header überspringen)...Das wäre allerdings eher unelegant und ich könnte auch gleich wie oben einfach einlesen, in array umwandeln, in float umwandeln und natürlich den Header wegschneiden.....
Hat jemand eine elegantere Idee?
Zusammenfassung:
1. Bestimmen ob csv-Datei header hat oder nicht!
2. csv-Datei (bei Bedarf ohne Header) einlesen (am Besten als np.array)
Hat jemand eine andere Idee, wie die von mir genannten?
Vielen Dank für die Unterstützung