关于 Numpy和Pandas axis的理解

嘉美伯爵

数据处理 Pandas Numpy 266

先知

  • 维度

在理解axis之前,我们应该理解维度的含义:通常的理解是:“点是0维、直线是1维、平面是2维、体是3维”。在机器学习中我们常常处理几十维的数据,对于机器学习常用的Numpy库,当我们赋予二维数组每一行一个值的时候,那么此时二维数组的列数就是多维空间的维度。每一行给的值通常是我们的样本值,它也是损失函数准确度的一个依据。

# 构造数组,该行列式给予样本值将变为4维空间
two = np.arange(9).reshape(3,3)
two
-------------
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
# 查看维度
two.ndim
-------------
2
  • axis

那么问题了,我们应该怎么理解Numpy和Pandas(axis概念全部继承于Numpy),当一个数组上升到二维我们需要考虑是对行操作还是对列操作,那么如果上升为3维数组呢,没错,还会多出来一个axis:2。 到这里你应该明白,axis其实就是对数组层数的操作,ndim是几,那么对应的axis就有几个,下面看一张图,或许你就会明白。

操作

  • 通俗理解(二维数组)

当axis=0的时候,即对第一层进行操作,此时Numpy只对第一层内的数组进行操作,即axis执行方向从上到下; 当axis=1的时候,即对第二层进行操作,此时Numpy只对第二层内的数组进行操作,即axis执行方向从左到右。

  • 再次理解

看下面的图,这里的理解是,当axis=0的时候,从上到下以列为整体;当axis=1的时候,从左往右以行为整体。

特殊

  • Dataframe

下面我们再次对其理解,看下图的红线部分axis=1,此时我们可以理解为当axis=1的时候是把列作为整体进行操作的,而当 axis=0也就是红线部分,我们把其看作是以行为整体操作的,numpy默认为行,因为这样保证数据的原始性。

  • drop

这个可以认为是特殊的,但记住一点当axis=0的时候是从上往下的,dorp指出了要删除iloc为1的行,那么此时便会从上往下进行删除,即以列为单位删除整行; 同理axis=1,从左往右推荐,当column='C'的满足条件,整列删除。

总结

说了这么多,你要记住的就是,axis=0的时候一定是从上往下的;axis=1的时候肯定是从左往右。

参考文档