pandas中的轴是什么意思?
这是我用来生成数据表的代码:
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 个回答
让我们来形象化一下(你会永远记住),
在Pandas中:
- axis=0表示沿着“索引”方向。这是一个按行操作。
假设我们要对dataframe1和dataframe2进行concat()操作,首先我们从dataframe1中取出第一行放到新的数据框中,然后再取出dataframe1中的另一行放入新的数据框,重复这个过程直到取完dataframe1的所有行。接着,我们对dataframe2做同样的操作。
基本上,就是把dataframe2叠加在dataframe1的上面,或者反过来。
比如在桌子或地板上堆一堆书。
- axis=1表示沿着“列”方向。这是一个按列操作。
假设我们要对dataframe1和dataframe2进行concat()操作,首先我们从dataframe1中取出第一整列(也就是第一系列)放到新的数据框中,然后取出dataframe1的第二列,放在旁边(横着),这个操作要重复,直到所有列都处理完。接着,对dataframe2也做同样的操作。
基本上,就是把dataframe2横着叠加。
比如把书摆在书架上。
更进一步,由于数组比矩阵更适合表示嵌套的n维结构!所以下面的内容可以帮助你更好地理解在多维情况下,轴是如何发挥重要作用的。此外,你实际上可以打印、写下、画出或可视化任何n维数组,但在纸上用矩阵表示(3维)超过3维的内容是不可行的。
这些回答确实有帮助,但对于像我这样的非程序员(也就是第一次在数据科学课程中学习Python的人)来说,理解起来还是不太直观。我发现用“沿着”或“对于每个”来描述行和列,还是有点让人困惑。
对我来说,更容易理解的说法是:
- 轴0会作用于每一列中的所有行
- 轴1会作用于每一行中的所有列
所以在轴0上计算平均值,就是计算每一列中所有行的平均值;而在轴1上计算平均值,就是计算每一行中所有列的平均值。
最终,这和@zhangxaochen和@Michael说的意思是一样的,只是用我更容易理解的方式表达而已。
这段话讲的是计算平均值时,选择哪个方向来计算。默认情况下,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 |
↓ ↓