Laden von Textdatei mit Float und String mit numpy.loadtxt

Ich habe eine Textdatei: data.txt die enthält

 5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 5.8,2.7,4.1,1.0,Iris-versicolor 6.2,2.2,4.5,1.5,Iris-versicolor 6.4,3.1,5.5,1.8,Iris-virginica 6.0,3.0,4.8,1.8,Iris-virginica 

Wie lade ich diese Daten mit numpy.loadtxt() so dass ich ein numpy Array nach dem Laden wie [['5.1' '3.5' '1.4' '0.2' 'Iris-setosa'] ['4.9' '3.0' '1.4' '0.2' 'Iris-setosa'] ...] ?

Ich habe es versucht

 np.loadtxt(open("data.txt"), 'r', dtype={ 'names': ( 'sepal length', 'sepal width', 'petal length', 'petal width', 'label'), 'formats': ( np.float, np.float, np.float, np.float, np.str)}, delimiter= ',', skiprows=0) 

  • Richtige Art, Schlüssel zu schlagen, Wert PAAR aus dem Wörterbuch?
  • Pickle Inkompatibilität von numpy Arrays zwischen Python 2 und 3
  • Speichern und Laden mehrerer Objekte in Gurkendatei?
  • Bild in E-Mail einbetten
  • Was ist der richtige Weg, um Bytes zu einem Hex-String in Python 3 zu konvertieren?
  • Download progressbar für Python 3
  • Verwenden Sie die Klasse als Typ-Hinweis für Argumente in ihren Methoden
  • Wie man 2 Integer in einer Zeile in Python eingeben?
  • 2 Solutions collect form web for “Laden von Textdatei mit Float und String mit numpy.loadtxt”

    Wenn du np.genfromtxt benutzt , kannst du dtype=None angeben, was genfromtxt dazu genfromtxt , den dtype jeder Spalte intelligent zu erraten. Am bequemsten, entlastet es Sie von dem Burder der Angabe der Anzahl der Bytes für die String Spalte erforderlich. (Auslassen der Anzahl der Bytes, indem Sie zB np.str , funktioniert nicht.)

     In [58]: np.genfromtxt('data.txt', delimiter=',', dtype=None, names=('sepal length', 'sepal width', 'petal length', 'petal width', 'label')) Out[58]: array([(5.1, 3.5, 1.4, 0.2, 'Iris-setosa'), (4.9, 3.0, 1.4, 0.2, 'Iris-setosa'), (5.8, 2.7, 4.1, 1.0, 'Iris-versicolor'), (6.2, 2.2, 4.5, 1.5, 'Iris-versicolor'), (6.4, 3.1, 5.5, 1.8, 'Iris-virginica'), (6.0, 3.0, 4.8, 1.8, 'Iris-virginica')], dtype=[('sepal_length', '<f8'), ('sepal_width', '<f8'), ('petal_length', '<f8'), ('petal_width', '<f8'), ('label', 'S15')]) 

    Wenn du np.loadtxt verwenden np.loadtxt , dann um deinen Code mit minimalen Änderungen zu beheben, kannst du:

     np.loadtxt("data.txt", dtype={'names': ('sepal length', 'sepal width', 'petal length', 'petal width', 'label'), 'formats': (np.float, np.float, np.float, np.float, '|S15')}, delimiter=',', skiprows=0) 

    Der Hauptunterschied, wenn man einfach np.str zu |S15 (eine 15-Byte-Zeichenfolge) ändert.

    Beachten Sie auch, dass open("data.txt"), 'r' open("data.txt", 'r') sein soll open("data.txt", 'r') . Aber da np.loadtxt einen Dateinamen akzeptieren kann, musst du nicht wirklich open .

    Es scheint, dass die Beibehaltung der Zahlen und Text zusammen verursacht Ihnen so viel Mühe – wenn Sie am Ende entscheiden, sie zu trennen, ist meine Problemumgehung:

     values = np.loadtxt('data', delimiter=',', usecols=[0,1,2,3]) labels = np.loadtxt('data', delimiter=',', usecols=[4]) 
    Python ist die beste Programmiersprache der Welt.