Numpy和Pandas中的axis=0 和axis=1的区分

Numpy和Pandas中的axis=0 和axis=1的区分

最近被这弄傻了,感觉python虽然灵活简单,但是不熟悉的情况下,各种工具库用起来还是挺吃力的。。。
这里就有axis的问题。
之前用numpy中的axis的时候一直就以为axis=0 表示的是行,axis=1表示的是列
结果练习使用pandas的时候遇到这样一个题目。

23. Given a DataFrame of numeric values, say

df = pd.DataFrame(np.random.random(size=(5, 3))) # a 5x3 frame of float values

how do you subtract the row mean from each element in the row?
大致意思就是所有元素值减去所在行的均值。如果按照我之前对于axis的理解,代码应该写成

df = pd.DataFrame(np.random.random(size=(5, 3))) # a 5x3 frame of float values
df.sub(df.mean(axis=0),axis=0)

这表示的意思是首先外层括号,df.sub(XX,axis=0),表示每行都减去xx
内层括号中的df.mean(axis=0)表示的是按每行来求均值
但是答案给的是

df.sub(df.mean(axis=1),axis=0)

这就让我有点懵逼了,难道pandas中的axis和numpy中不一样吗,照说不一样不是平添麻烦嘛
所有自己测试了下。

import numpy as np
import pandas as pd
numpy_1 = np.random.random((5,3))
print(numpy_1)
numpy_2 = np.mean(numpy_1,axis=0)
print(numpy_2)
numpy_3 = np.mean(numpy_1,axis=1)
print(numpy_3)
[[0.34333946 0.09371906 0.59298731]
 [0.06620672 0.39336999 0.75659942]
 [0.02710957 0.35044475 0.8935719 ]
 [0.2283963  0.30529232 0.98260468]
 [0.52246286 0.60936169 0.95504255]]
[0.23750298 0.35043756 0.83616117]
[0.34334861 0.40539204 0.42370874 0.5054311  0.69562237]

咦,我擦,numpy中怎么也是这样的。一下子蒙蔽了。
不得不再来回顾下,为什么我以前印象中一直有一个axis=0表示行,axis=1表示列的概念呢。
想来想去,感觉可以这样解释:
axis=0 表示的应该是按行来展开对列进行操作,
axis=1 表示的应该是按列来展开对行进行操作。
这样大概就能说通了。
所以上面的问题确实应该如答案所写。

你可能感兴趣的:(numpy,pandas,axis)