【Python】axis详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37701443/article/details/82765721
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中我也走了不少弯路,由此产生了写下这个博客的念头,若有偏颇不当之处欢迎指正,谢谢!

猜你喜欢

转载自blog.csdn.net/qq_37701443/article/details/82765721