熊猫数据框/ 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 = down 和 1 = 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
将使该方法作用于行。