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'] ...] ?

  • Gleiche Zeile mehrmals in einer Form in django
  • Python numpy paarweise edit-distance
  • Berechnung der Differenz zwischen zwei Zeilen in Python / Pandas
  • Wie machst du einen String wiederholen sich in Python
  • Einbetten von Text in PNG
  • Wie kann ich Python-Warnungen in einer Django-Protokolldatei protokollieren?
  • 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) 

    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.