Python干货,不用再死记硬背pandas关于轴的概念?

2021-09-01 15:28:16 浏览数 (1)

前言

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",然后把其删除。

0 人点赞