Ohne Pandas zu verwenden, können Sie eine Teilmenge der Felder eines strukturierten Arrays (recarray) auswählen. Zum Beispiel:
In [338]: dt=np.dtype('i,f,i,f')
In [340]: A=np.ones((3,),dtype=dt)
In [341]: A[:]=(1,2,3,4)
In [342]: A
Out[342]:
array([(1, 2.0, 3, 4.0), (1, 2.0, 3, 4.0), (1, 2.0, 3, 4.0)],
dtype=[('f0', '<i4'), ('f1', '<f4'), ('f2', '<i4'), ('f3', '<f4')])
eine Teilmenge der Felder.
In [343]: B=A[['f1','f3']].copy()
In [344]: B
Out[344]:
array([(2.0, 4.0), (2.0, 4.0), (2.0, 4.0)],
dtype=[('f1', '<f4'), ('f3', '<f4')])
, die unabhängig von A
geändert werden kann:
In [346]: B['f3']=[.1,.2,.3]
In [347]: B
Out[347]:
array([(2.0, 0.10000000149011612), (2.0, 0.20000000298023224),
(2.0, 0.30000001192092896)],
dtype=[('f1', '<f4'), ('f3', '<f4')])
In [348]: A
Out[348]:
array([(1, 2.0, 3, 4.0), (1, 2.0, 3, 4.0), (1, 2.0, 3, 4.0)],
dtype=[('f0', '<i4'), ('f1', '<f4'), ('f2', '<i4'), ('f3', '<f4')])
Die strukturierte Teilmenge von Feldern ist nicht hoch entwickelt. A[['f0','f1']]
reicht aus, um angezeigt zu werden, aber es wird eine Warnung ausgegeben oder ein Fehler ausgegeben, wenn Sie versuchen, diese Teilmenge zu ändern. Deshalb habe ich copy
mit B
verwendet.
Es gibt eine Reihe von Funktionen, die das Hinzufügen und Entfernen von Feldern aus Rekarrays erleichtern. Ich muss das Zugangsmuster nachschlagen. Aber meistens das Konstrukt ein neues dtype
, und leeren Array, und kopieren Sie dann Felder nach Namen.
import numpy.lib.recfunctions as rf