pandas中的轴是什么意思?

415 投票
28 回答
487921 浏览
提问于 2025-04-17 20:37

这是我用来生成数据表的代码:

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

所以我想问的是:pandas中的axis是什么意思?

28 个回答

134

让我们来形象化一下(你会永远记住),

在Pandas中:

  1. axis=0表示沿着“索引”方向。这是一个按行操作

假设我们要对dataframe1和dataframe2进行concat()操作,首先我们从dataframe1中取出第一行放到新的数据框中,然后再取出dataframe1中的另一行放入新的数据框,重复这个过程直到取完dataframe1的所有行。接着,我们对dataframe2做同样的操作。

基本上,就是把dataframe2叠加在dataframe1的上面,或者反过来。

比如在桌子或地板上堆一堆书。

  1. axis=1表示沿着“列”方向。这是一个按列操作

假设我们要对dataframe1和dataframe2进行concat()操作,首先我们从dataframe1中取出第一整列(也就是第一系列)放到新的数据框中,然后取出dataframe1的第二列,放在旁边(横着),这个操作要重复,直到所有列都处理完。接着,对dataframe2也做同样的操作。

基本上,就是把dataframe2横着叠加。

比如把书摆在书架上。

更进一步,由于数组比矩阵更适合表示嵌套的n维结构!所以下面的内容可以帮助你更好地理解在多维情况下,轴是如何发挥重要作用的。此外,你实际上可以打印、写下、画出或可视化任何n维数组,但在纸上用矩阵表示(3维)超过3维的内容是不可行的。

enter image description here

204

这些回答确实有帮助,但对于像我这样的非程序员(也就是第一次在数据科学课程中学习Python的人)来说,理解起来还是不太直观。我发现用“沿着”或“对于每个”来描述行和列,还是有点让人困惑。

对我来说,更容易理解的说法是:

  • 轴0会作用于每一列中的所有行
  • 轴1会作用于每一行中的所有列

所以在轴0上计算平均值,就是计算每一列中所有行的平均值;而在轴1上计算平均值,就是计算每一行中所有列的平均值。

最终,这和@zhangxaochen和@Michael说的意思是一样的,只是用我更容易理解的方式表达而已。

538

这段话讲的是计算平均值时,选择哪个方向来计算。默认情况下,axis=0。这个设置和numpy.mean的用法是一致的,当你明确指定axis时(在numpy.mean中,默认情况下axis是None,这样会计算整个数组的平均值),axis=0表示沿着(在pandas中叫索引),而axis=1表示沿着。为了更清楚,你也可以选择用axis='index'(代替axis=0)或者axis='columns'(代替axis=1)来指定方向。

+------------+---------+--------+
|            |  A      |  B     |
+------------+---------+---------
|      0     | 0.626386| 1.52325|----axis=1----->
+------------+---------+--------+
             |         |
             | axis=0  |
             ↓         ↓

撰写回答