pandas中简单的二维矩阵
- axis=0或者“index” :
如果是单行操作,就指的是某一行
如果是聚合操作,指的是跨行cross rows - axis=1或者“columns”
如果是单列操作,就指的是某一列
如果是聚合操作,指的是跨列cross columns
按哪个axis,就是这个axis要动起来(类似被for循环遍历),其他的axis保持不动
在二位矩阵中将axis=0理解成行,axis=1理解成列是没有问题的,但是在多维度矩阵中就比较难以理解,接下来会介绍多维矩阵中的理解方法
先看例子:首先是生成测试数据,数据为0-11的三行四列的二维矩阵,列名为A,B,C,D
df = pd.DataFrame(np.arange(12).reshape(3,4),columns=["A","B","C","D"])
df
#结果:
A B C D
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
进行单行删除操作(axis = 0) 需要指定行索引
print(df.drop(0,axis=0))
#结果:
A B C D
1 4 5 6 7
2 8 9 10 11
进行跨行求均值聚合操作(axis = 0) ,就是跨行操作,axis = 0在动,其他的axis不动,得到的实际就是每一列均值
print(df.mean(axis=0))
#结果:
A 4.0
B 5.0
C 6.0
D 7.0
dtype: float64
进行单列删除操作(axis = 1) 需要指定列名
print(df.drop(['A'],axis=1))
#结果:
B C D
0 1 2 3
1 5 6 7
2 9 10 11
进行跨列求均值聚合操作(axis = 1) ,就是跨列操作,axis = 1在动,其他的axis不动,得到的实际就是每一行均值
print(df.mean(axis=1))
#结果:
0 1.5
1 5.5
2 9.5
dtype: float64
Numpy中的多维矩阵(建议二维也参照这个理解)
在多维矩阵中就不能把axis=0理解成行,axis=1,理解成列了,要将axis理解成轴更合理,有个不变的规则是,axis=0,永远指的是narray最外层的括号,axis=1是第二个括号,axis=2是第三个括号,以此类推。
代码分析验证:生成数据,数据是0-23的,矩阵形状是(2,3,4)
data = np.arange(24).reshape(2, 3, 4)
data
#结果:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
其中reshape(2,3,4) ,维度2代表的是最外层括号,即axis=0 ,维度3即axis=1,维度4即axis=2
假设我们取均值 要拿掉维度2(axis=0),按照上面的理解我们拿掉的是最外层的括号,得到的维度应该是3*4
print (data.mean(axis=0))
#结果:
[[ 6. 7. 8. 9.]
[10. 11. 12. 13.]
[14. 15. 16. 17.]]
具体的计算逻辑为:我们要消灭的维度为2,所以参与计算的元素是两个,比如6这个值,是0与12求平均的结果,结果矩阵b中b[0][0]是a[0][0][0]与a[1][0][0]求平均的结果
假设要消灭的维度为3,axis=1,参与计算的元素是3个,最后的结果是2*4。
print (data.mean(axis=1))
#结果:
[[ 4. 5. 6. 7.]
[16. 17. 18. 19.]]
结果矩阵b[0][0]是a[0][0][0]+a[0][1][0]+a[0][2][0]平均的结果