Python干货,不用再死记硬背pandas关于轴的概念?
前言
axis 表示轴,是处理多维数据时用于表示维度方向的概念,在 pandas 中大部分的方法都有 axis 参数,因为 pandas 需要调用者告诉他,需要处理的是哪个维度的数据。
本文将分享我对 axis 的理解,希望帮助你更好理解 axis 的概念,这些概念不仅仅应用在 pandas ,同样适合于其他相关的库的理解(如 numpy 中的3维或以上的处理)。
通过本文你将学到以下内容:
- 怎么理解不同方法中的 axis 参数的含义
不要死记硬背
有小伙伴会说,axis 这很简单啊,不就是**0表示行,1表示列**,还需要学啥呢?但是,你会发现在 pandas 中,有些方法好像对于 axis 的含义是相反的。
来看些例子,我们有如下数据:
- 3列数据,每列数据都是1到3的数字
'删除第2列',代码如下:
- df.drop('col2',axis=1) ,其中 axis=1 ,表明删除列
'删除第2行',代码如下:
- df.drop(1,axis=0) ,其中 axis=0 ,表明删除行
这看起来很好理解,对吧。我们继续,不妨你在看答案之前,自己尝试思考一下 axis 的值是啥。
'为每一行求平均值' ,代码如下:
咦?为什么是 axis = 1 呢?根据直觉,你可能第一时间想到的是 axis = 0 吧。说好的 **0表示行,1表示列** 呢?
> 我知道网络上有许多讨论这方面的文章,但是我看到的大部分相关文章都只是列出问题,然后告诉你记住他们,记住当调用某些方法时概念是相反就好了。
真正的理解
我非常喜欢通过想象图像,去加深学习,来看看 pandas 中关于'轴'的示意图:
- 轴0,则表示沿着行方向(竖向)
- 轴1,则表示沿着列方向(横向)
pandas 中有许多对 DataFrame 做操作的方法,这些方法都需要提供 axis 参数,用于指示对行或列操作。
而 pandas 中的计算方法对于 axis 参数的含义,**实际与 numpy 是一致的:'表示范围扩展的轴方向'**。
还是拿之前 '为每一行求平均值' 的需求来说。
当调用 df.mean(axis=1) 时,对于图如下:
- axis = 1 ,表示向轴1方向(横向)扩展范围
- 然后,每个扩展范围应用 mean 方法求平均值
'为每一列求平均值' 。
当调用 df.mean(axis=0) 时,对应图如下:
- axis = 0 ,表示向轴0方向(竖向)扩展范围
- 然后,每个扩展范围应用 mean 方法求平均值
再回头看看在 pandas 中删除方法 drop 。
在官方网站的文档中,明确说明 axis 参数的含义:'从行或列中删除其标签'。
也就是说,axis 指示了在哪个轴上寻找对应的标签,然后将其删除。
看看对应图:
- 由于 axis = 1,因此会在轴1方向(横向)中寻找标签值'col2',然后把其删除。