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 表示的應該是按列來展開對行進行操作。
這樣大概就能說通了。
所以上面的問題確實應該如答案所寫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章