Pandas 和 Numpy 中的 axis


在使用 Pandas 和 Numpy 的时候,总是搞不懂 axis,感觉和我理解的正好相反。

比如下面的操作:

import numpy as np
a = np.array([1, 2], [3, 4])
s0 = np.sum(a, axis=0)
s1 = np.sum(a, axis=1)

axis=0 代表的是和行有关,axis=1 是和列有关,所以我理解的是 s0 是对行进行相加,结果应该 s0=[3, 7],但实际却是[4, 6]。

关于为什么是这样的设计,我相信下面这个 youtube 视频可以解决问题:

如果你看不了,我下面简单说明一下。

还是以上面的例子为例,如果你做一些数学上的操作,例如 mean,sum,axis=0 代表的是穿越所有的行进行求 mean,sum 等等。

我们通过下面的图来理解一下:

axis.png

当我们设置 axis=0 的时候,无论是 pandas 还是 numpy 它都会按照箭头的方向对所有的行进行操作,所以最后的结果是 [4, 6]。

但是有一种情况我们需要注意,就是在使用 drop 的时候,

import pandas as pd
df = pd.DataFrame(a, columns=['col1', 'col2'], index=['row1', 'row2'])
df.drop('col1', axis=1)

首先我们创建一个下面结果的 dataframe object,

  col1 col2
row1 1 2
row2 3 4

然后我们操作第一列,是通过 axis=1 来删除的,这里的逻辑和我们的正常思维是一样的。