下面是我生成一个数据框架的代码:

import pandas as pd
import numpy as np

dff = pd.DataFrame(np.random.randn(1,2),columns=list('AB'))

然后我得到了数据框架:

+------------+---------+--------+
|            |  A      |  B     |
+------------+---------+---------
|      0     | 0.626386| 1.52325|
+------------+---------+--------+

当我输入命令时:

dff.mean(axis=1)

我得到:

0    1.074821
dtype: float64

根据pandas的参考,axis=1代表列,我希望命令的结果是

A    0.626386
B    1.523255
dtype: float64

我的问题是:轴在熊猫中是什么意思?


当前回答

数组被设计为坐标轴=0,行被垂直放置,而坐标轴=1,列被水平放置。Axis指的是数组的尺寸。

其他回答

让我们想象一下(你会永远记住),

熊猫:

轴=0表示沿着“索引”。这是一个行运算。

假设,要对dataframe1和dataframe2执行concat()操作, 我们将从dataframe1中取出第一行并放入新的DF中,然后我们从dataframe1中取出另一行并放入新的DF中,我们重复这个过程,直到我们到达dataframe1的底部。然后,我们对dataframe2执行相同的过程。

基本上,将dataframe2堆叠在dataframe1之上,反之亦然。

在桌子或地板上堆一堆书

轴=1表示沿着“列”。这是一个按列的运算。

假设,要对dataframe1和dataframe2执行concat()操作, 我们将取出第一个完整的列(a.k.)。第一个系列)的dataframe1,并放置到新的DF,然后我们拿出dataframe1的第二列,并保持相邻的(侧),我们必须重复这个操作,直到所有列完成。然后,我们在dataframe2上重复相同的过程。 基本上, 横向堆叠dataframe2。

把书摆放在书架上。

更重要的是,与矩阵相比,数组更好地表示嵌套的n维结构!所以下面可以帮助你更直观地看到轴是如何在一维以上的情况下发挥重要作用的。此外,你实际上可以打印/写入/绘制/可视化任何n-dim数组,但在矩阵表示(3-dim)中书写或可视化相同的内容在超过3维的纸张上是不可能的。

轴= 0表示从上到下 轴= 1表示从左到右

sums[key] = lang_sets[key].iloc[:,1:].sum(axis=0)

给定的例子是取column == key中所有数据的和。

Axis指的是数组的维度,在pd的情况下。DataFrames轴=0是指向下方的维度,轴=1是指向右侧的维度。

示例:考虑一个形状为(3,5,7)的ndarray。

a = np.ones((3,5,7))

A是一个三维ndarray,即它有3个轴(“axis”是“axis”的复数)。a的构型看起来就像3片面包每片的尺寸都是5乘7。A[0,:,:]表示第0个切片,A[1,:,:]表示第1个切片,等等。

a.s sum(axis=0)将沿着a的第0个轴应用sum()。你将添加所有的切片,最终得到一个形状(5,7)的切片。

a.s sum(axis=0)等价于

b = np.zeros((5,7))
for i in range(5):
    for j in range(7):
        b[i,j] += a[:,i,j].sum()

B和a.sum(轴=0)看起来都是这样的

array([[ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.]])

在警局里。DataFrame,轴的工作方式与numpy相同。数组:axis=0将对每一列应用sum()或任何其他约简函数。

注意:在@zhangxaochen的回答中,我发现“沿着行”和“沿着列”这两个短语有点让人困惑。Axis =0表示“沿每列”,Axis =1表示“沿每行”。

正确使用axis=的问题在于它在两种主要不同情况下的使用:

用于计算累积值或重新排列(如排序)数据。 用于操纵(“玩”)实体(例如数据帧)。

这个答案背后的主要思想是为了避免混淆,我们选择一个数字或一个名称来指定特定的轴,以更清楚、直观和描述性的为准。

Pandas基于NumPy, NumPy基于数学,特别是n维矩阵。下面是三维空间中数学中常用的轴的名称:

这张图仅用于记忆坐标轴的序数:

x轴为0, y轴为1,和 z轴为2。

z轴仅用于面板;对于数据框架,我们将把我们的兴趣限制在带有x轴(0,垂直)和y轴(1,水平)的绿色二维基本平面上。

这都是关于axis= parameter的潜在值的数字。

轴的名称是“索引”(你可以使用别名“行”)和“列”,为了解释这些名称和(轴的)序数之间的关系并不重要,因为每个人都知道“行”和“列”是什么意思(这里的每个人-我想-都知道“索引”在pandas中的意思)。

现在,我的建议是

If you want to compute an accumulated value, you may compute it from values located along axis 0 (or along axis 1) — use axis=0 (or axis=1). Similarly, if you want to rearrange values, use the axis number of the axis, along which are located data for rearranging (e.g. for sorting). If you want to manipulate (e.g. concatenate) entities (e.g. dataframes) — use axis='index' (synonym: axis='rows') or axis='columns' to specify the resulting change — index (rows) or columns, respectively. (For concatenating, you will obtain either a longer index (= more rows), or more columns, respectively.)

在Pandas上有两种最常见的axis用法:

用作索引,如df。iloc [0, 1] 用作函数内的参数,如df.mean(axis=1)

当使用作为索引时,我们可以解释为axis=0代表行,axis=1代表列,即df。iloc(行、列)。所以,df。Iloc[0,1]表示从第0行和第1列中选择数据,在本例中,它返回1.52325。

当使用作为参数时,axis=0表示垂直跨行选择对象,而axis=1表示水平跨列选择对象。

因此,df.mean(axis=1)表示水平计算跨列的平均值,它返回:

0    1.074821
dtype: float64

轴的一般用途是用于选择要操作的特定数据。而理解轴的关键,是把“选择”和“操作”的过程分开。

我们用一种额外的情况来解释:df。下降(A轴= 1)

该操作是df.drop(),它需要目标对象的名称 列,在这里是A。它和df。mean()不一样 对数据内容进行操作。 选择的是列的名称,而不是列的数据内容。由于所有列名都是水平排列在列之间的,所以我们使用axis=1来选择name对象。

总之,我们最好把“选择”和“操作”分开,对以下问题有一个清晰的认识:

选择什么对象 是怎么安排的