我一直很困惑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
应该表示列的平均值,而不是行的平均值……
发布于 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
将使该方法改为作用于行。
发布于 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
值将被更改。
发布于 2017-04-14 21:56:47
另一种解释是:
// 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
(轴表示位置)
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
(轴表示方向)
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
https://stackoverflow.com/questions/25773245
复制相似问题