df = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], \
columns=["col1", "col2", "col3", "col4"])
>>>df
col1 col2 col3 col4
0 1 1 1 1
1 2 2 2 2
2 3 3 3 3
>>> df.mean(axis=1)
0 1
1 2
2 3
***
axis=1 表示沿着每一行执行某方法(实际作用对象是列)
axis=0 表示沿着每一列执行某方法(实际作用对象是行)
这里很绕,请看下面的例子加深印象
***
在这里的df.mean(axis=1)可以理解为沿着每一行计算在这行的各列的和然后除以列数,取平均值(比如说第一行1111,1*4/4=1,第二行2222,2*4/2=2,以此类推)
>>> a = np.arange(6).reshape(2,3)
>>> a
array([[0, 1, 2],
[3, 4, 5]])
>>> np.argmax(a)
5
>>> np.argmax(a, axis=0)
array([1, 1, 1])
>>> np.argmax(a, axis=1)
array([2, 2])
argmax()函数返回的是数组中最大值的索引值
在这里的np.argmax(a,axis=1)表示沿着每一行判断在本行的各列的值是否是最大值(比如说第一行012,明显2最大,索引取2,然后看第二行345,5最大,索引取2)
import numpy as np
b= np.arange(12).reshape(3,4)
print(b)
print(np.split(b,2,axis=1))
print(np.split(b,3,axis=0))
#axis=1
#[array([[0, 1],
# [4, 5],
# [8, 9]]), array([[ 2, 3],
# [ 6, 7],
# [10, 11]])]
#axis=0
#[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
在这里的np.split(b,2,axis=1)表示沿着每一行下去分割在这行的各列(本行有一行四列,一共有三行四列),分成2份,所以从中间那对半分
在这里的np.split(b,3,axis=0)表示沿着每一列下去分割在这列的各行(本列有三行一列,一共有三行四列),分成3份,所以将三行分为三份
import pandas as pd
import numpy as np
dates = pd.date_range('20130101',periods=6)
df = pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])
df.iloc[0,1]=np.nan#NaN
df.iloc[1,2]=np.nan
print(df)
print(df.dropna(axis=0,how='any'))
#print(df.dropna(axis=0,how='all'))
print(df.dropna(axis=1,how='any'))
#Output
'''
A B C D
2013-01-01 0 NaN 2.0 3
2013-01-02 4 5.0 NaN 7
2013-01-03 8 9.0 10.0 11
2013-01-04 12 13.0 14.0 15
2013-01-05 16 17.0 18.0 19
2013-01-06 20 21.0 22.0 23
A B C D
2013-01-03 8 9.0 10.0 11
2013-01-04 12 13.0 14.0 15
2013-01-05 16 17.0 18.0 19
2013-01-06 20 21.0 22.0 23
A D
2013-01-01 0 3
2013-01-02 4 7
2013-01-03 8 11
2013-01-04 12 15
2013-01-05 16 19
2013-01-06 20 23
'''
在这里的df.dropna(axis=0,how='any')表示沿着每一列下去,看本列的各行中是否有NaN,若有,则删去该NaN对应的行
在这里的df.dropna(axis=1,how='any')表示沿着每一行下去,看本行的各列中是否有NaN,若有,则删去该NaN对应的列
以上是我的个人理解,在学习axis中我也走了不少弯路,由此产生了写下这个博客的念头,若有偏颇不当之处欢迎指正,谢谢!