Umgebung
Wenn Sie numpy.loadtxt
für eine Datei aufrufen, die Zeichenfolgen enthält, gehen Sie wie folgt vor:
import numpy as np
datestxt = np.loadtxt("NYSE_dates.txt", dtype=str)
print(datetxt)
Wobei NYSE_dates.txt einfach eine Liste von Daten ist (könnte wirklich alles sein):
7/5/1962
7/6/1962
7/9/1962
...
12/29/2020
12/30/2020
12/31/2020
Ausgabe ist:
["b'7/5/1962'" "b'7/6/1962'" "b'7/9/1962'" ..., "b'12/29/2020'"
"b'12/30/2020'" "b'12/31/2020'"]
Wie Sie sehen können, wurden alle Zeichenfolgen in Bytes umgewandelt und dann durch conv
, da Sie das gleiche Ergebnis aus str(str('12/31/2020').encode('latin1'))
pro conv
& compat.asbytes
.
Nach dem Betrachten des Codes scheint es, dass alle Zeichenfolgen durchgehend mit asbytes(...)
Bytes umgewandelt werden, wie zum Beispiel in split_line(...)
. Dies muss also bedeuten, dass jede Routine im Modul fehlerhaft ist.
Ich habe auch dieses Problem. Das ist sehr sehr ärgerlich; Grundsätzlich können Sie in Python3 keinen Loadtxt verwenden.
Temporäre Lösung: Ich habe alle asbytes () -Aufrufe in der loadtxt-Methode entfernt.
Ja, ich erinnere mich, dass ich dachte, da drin sei etwas faul, als ich den Code durchgesehen habe.
Für die Aufzeichnung stoße ich auf dasselbe Problem mit datetime64-Eingaben, was zu einem Analysefehler der Form führt: Error parsing datetime string "b'2013-01-02'"
. Um dies zu umgehen, musste ich einen Konverter für diese Spalte erstellen:
def decoder(input_bytes):
return input_bytes.decode("ascii")
Dies wäre im Produktionscode in Ordnung, aber für Schulungsmaterial höchst unschön ...
Abstoßen auf 1.11.
Umgehung - Führen Sie zuerst iconv für die Datei aus.
Abstoßen auf 1.12.
Ich sehe, dass dies vorangebracht wird, aber ich finde, dass dies ein Fehler ist, der behoben werden sollte, und ein Fix scheint leicht zu implementieren zu sein.
Ziemlich schockierend, dass dies seit 5 Jahren nicht mehr behoben wurde
Es sieht so aus, als ob dies in NumPy 1.13.3 wie gewünscht funktioniert (obwohl ich nicht sicher bin, welcher PR es behoben hat). Kann dieses Problem geschlossen werden?
>>> import io
>>> import numpy as np
>>> f = io.StringIO("7/5/1962\n7/6/1962\n")
>>> np.loadtxt(f, dtype=str)
array(['7/5/1962', '7/6/1962'],
dtype='<U8')
>>> np.__version__
'1.13.3'
Sieht so aus, als ob dies in # 8349 als Antwort auf # 8033 behoben wurde.
Schließen. Bitte öffnen Sie es bei Bedarf erneut.
Hilfreichster Kommentar
Ziemlich schockierend, dass dies seit 5 Jahren nicht mehr behoben wurde