numpy利用fancy indexing提取出想要的行

In [2]: arr = np.empty((8, 4))

In [3]: arr
Out[3]:
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])

In [4]: arr = np.empty((8, 4))

In [5]: for i in range(8):
   ...:     arr[i] = i
   ...:

In [6]: arr
Out[6]:
array([[0., 0., 0., 0.],
       [1., 1., 1., 1.],
       [2., 2., 2., 2.],
       [3., 3., 3., 3.],
       [4., 4., 4., 4.],
       [5., 5., 5., 5.],
       [6., 6., 6., 6.],
       [7., 7., 7., 7.]])

In [7]: arr[:, [1, 3]] # 可以提取出第2、4行的8 * 2矩阵
Out[7]:
array([[0., 0.],
       [1., 1.],
       [2., 2.],
       [3., 3.],
       [4., 4.],
       [5., 5.],
       [6., 6.],
       [7., 7.]])

对于pandas,可以使用iloc完成对特定列的提取,在利用.values属性就可以提取出来成为ndarray:

In [69]: frame = pd.DataFrame(np.arange(16).reshape((4, 4)), index = list('abcd'), columns = list('ABCD'))

In [70]: frame
Out[70]:
    A   B   C   D
a   0   1   2   3
b   4   5   6   7
c   8   9  10  11
d  12  13  14  15

In [71]: frame.iloc[:, [1, 2]]
Out[71]:
    B   C
a   1   2
b   5   6
c   9  10
d  13  14

In [74]: frame.iloc[:, [1, 2]].values
Out[74]:
array([[ 1,  2],
       [ 5,  6],
       [ 9, 10],
       [13, 14]])

猜你喜欢

转载自blog.csdn.net/qq_39422041/article/details/81103422