Numpy: npyio.loadtxt ist eine Byte-Casting-Textdatei, auch wenn der str-Typ angegeben ist.

Erstellt am 8. Nov. 2012  ·  11Kommentare  ·  Quelle: numpy/numpy

Umgebung

  • Python: Version 3.3 (python.org-Version) unter OS X Mountain Lion
  • numpy: Vom Git-Meister geklont

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.

00 - Bug numpy.lib

Hilfreichster Kommentar

Ziemlich schockierend, dass dies seit 5 Jahren nicht mehr behoben wurde

Alle 11 Kommentare

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

toddrjen picture toddrjen  ·  4Kommentare

navytux picture navytux  ·  4Kommentare

dmvianna picture dmvianna  ·  4Kommentare

kevinzhai80 picture kevinzhai80  ·  4Kommentare

qualiaa picture qualiaa  ·  3Kommentare