熊猫数据框/ numpy数组“轴”定义中的歧义


问题内容

对于如何定义python轴,以及它们是否引用DataFrame的行或列,我一直感到困惑。考虑下面的代码:

>>> df = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], columns=["col1", "col2", "col3", "col4"])
>>> df
   col1  col2  col3  col4
0     1     1     1     1
1     2     2     2     2
2     3     3     3     3

因此,如果调用df.mean(axis=1),我们将在各行中获得均值:

>>> df.mean(axis=1)
0    1
1    2
2    3

但是,如果调用df.drop(name, axis=1),则实际上是 删除一列 ,而不是一行:

>>> df.drop("col4", axis=1)
   col1  col2  col3
0     1     1     1
1     2     2     2
2     3     3     3

有人可以帮助我了解pandas / numpy / scipy中“轴”的含义吗?

旁注,DataFrame.mean可能只是定义错误。它在文档中DataFrame.mean说这axis=1应该是指列上的平均值,而不是行上的平均值。


问题答案:

将其记住为 0 = down1 = across 可能是最简单的。

这表示:

  • 使用axis=0的方法应用于沿着每列,或行标签(索引)。
  • 用于axis=1在每一行或列标签上应用方法。

这是一张图片,显示每个轴都引用的DataFrame部分:

记住熊猫遵循NumPy对这个词的使用也很有用axis。在NumPy的术语表中解释了用法:

为一维以上的数组定义了轴。二维数组具有两个相应的轴:第一个垂直 跨行 垂直 向下(轴0) ,第二个 水平跨列垂直(轴1) 。[
我的重点 ]

因此,关于问题中的方法df.mean(axis=1),似乎已正确定义。它以 水平方式跨列
(即沿每一行)获取条目的平均值。另一方面,df.mean(axis=0)这是跨行垂直 向下 作用的操作。

同样,df.drop(name, axis=1)指的是对列标签的操作,因为它们直观地越过了水平轴。指定axis=0将使该方法作用于行。