首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pandas Dataframe / Numpy数组“轴”定义中的多义性

Pandas Dataframe / Numpy数组“轴”定义中的多义性
EN

Stack Overflow用户
提问于 2014-09-11 03:11:15
回答 6查看 28.5K关注 0票数 102

我一直很困惑python轴是如何定义的,以及它们是指DataFrame的行还是列。考虑下面的代码:

代码语言:javascript
复制
>>> 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),我们将得到各行的平均值:

代码语言:javascript
复制
>>> df.mean(axis=1)
0    1
1    2
2    3

然而,如果我们调用df.drop(name, axis=1),我们实际上丢弃了一列,而不是一行:

代码语言:javascript
复制
>>> 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应该表示列的平均值,而不是行的平均值……

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-09-11 04:20:45

将其记为0=down和1=across可能是最简单的。

这意味着:

  • 使用axis=0将方法应用于每列或应用于行标签(索引)。
  • 使用axis=1将方法应用于每行或应用于列标签。

下面的图片显示了每个轴引用的DataFrame的各个部分:

记住Pandas遵循NumPy对单词axis的使用也很有用。在NumPy的glossary of terms中解释了用法

轴是为具有多个维度的数组定义的。二维数组有两个对应的轴:第一个轴垂直向下跨行运行(轴0),第二个轴水平跨列运行(轴1)。我的重点

因此,关于问题中的方法,df.mean(axis=1)似乎定义正确。它取横跨列的条目的平均值,即沿着每个单独的行。另一方面,df.mean(axis=0)将是跨行垂直向下操作的操作。

类似地,df.drop(name, axis=1)指的是列标签上的操作,因为它们直观地横跨水平轴。指定axis=0将使该方法改为作用于行。

票数 180
EN

Stack Overflow用户

发布于 2017-10-16 15:07:50

已经有了正确的答案,但我给你另一个>2维的例子。

将参数axis轴表示为changed.时, to be

例如,假设有一个维度为a x b x c的数据帧。

  • df.mean(axis=1)返回维度为a x 1 x c的数据帧。
  • df.drop("col4", axis=1)返回维度为a x (b-1) x c的数据帧。

在这里,axis=1指的是第二个轴,即b,因此在这些示例中,b值将被更改。

票数 13
EN

Stack Overflow用户

发布于 2017-04-14 21:56:47

另一种解释是:

代码语言:javascript
复制
// Not realistic but ideal for understanding the axis parameter 
df = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]],
                  columns=["idx1", "idx2", "idx3", "idx4"],
                  index=["idx1", "idx2", "idx3"]
                 )

---------------------------------------1
|          idx1  idx2  idx3  idx4
|    idx1     1     1     1     1
|    idx2     2     2     2     2
|    idx3     3     3     3     3
0

关于df.drop (轴表示位置)

代码语言:javascript
复制
A: I wanna remove idx3.
B: **Which one**? // typing while waiting response: df.drop("idx3",
A: The one which is on axis 1
B: OK then it is >> df.drop("idx3", axis=1)

// Result
---------------------------------------1
|          idx1  idx2     idx4
|    idx1     1     1     1
|    idx2     2     2     2
|    idx3     3     3     3
0

关于df.apply (轴表示方向)

代码语言:javascript
复制
A: I wanna apply sum.
B: Which direction? // typing while waiting response: df.apply(lambda x: x.sum(),
A: The one which is on *parallel to axis 0*
B: OK then it is >> df.apply(lambda x: x.sum(), axis=0)

// Result
idx1    6
idx2    6
idx3    6
idx4    6
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25773245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档