2016-04-18 8 views
1

Ich bin auf der Suche nach einer einfachen Möglichkeit, ein Feld einer numpy strukturierten Array einer ausgewählten Zeile davon zu ändern. Hier meine SWE ist:So ändern Sie eine Spalte einer ausgewählten Zeile aus einem numpy strukturierten Array

import numpy as np 
dt=np.dtype([('name',np.unicode,80),('x',np.float),('y',np.float)]) 
a=np.array([('a',0.,0.),('b',0.,0.),('c',0.,0.) ],dtype=dt) 
b=a.copy() 
a[a['name']=='a']['x']=1 
print a==b # return [ True True True] 

In diesem Beispiel sind die a==b Ergebnisse sollten [False True True] .Actually zurückkehren, würde Ich mag, um die Linie meiner Array aus dem Feld ‚Name‘ ausgewählt und ändern Sie den Wert eines Feldes davon (hier 'x').

+0

Es ist Zeit, zu Pandas zu gehen;). df = pandas.Dataframe (a); df.loc [df.name == 'a', 'x'] = 1. –

Antwort

2

Ich fand die Antwort ... Der Punkt ist die Position des Feldes und der Maske. Sie müssen die Maske auf die Feldspalte anwenden und nicht nach dem Feld des maskierten Arrays suchen:

a['x'][a['name']=='a']=1 
print a==b # returns [False True True] 
+1

Die Reihenfolge der Indizierung ist wichtig, weil "erweiterte Indizierung", wie z. B. "[a ['name'] == 'a']', immer eine * Kopie * zurückgibt, während "grundlegende Indizierung" wie 'a [' x '] 'gibt immer * view * zurück. Das Ändern der Ansicht mit 'a ['x'] [a ['name'] == 'a'] = 1 'betrifft das ursprüngliche Array' a ', während die Kopie mit' a ['[' name '] = geändert wird = 'a'] ['x'] = 1 'hat keinen Einfluss auf' a '. – unutbu

Verwandte Themen