python数据分析--numpy

轴(axis)

在numpy中可以理解为方向,使用0、1、2...数字表示,对于一个一维数组,只有1个0轴,对于一个二维数组,有0、1轴,对于三维数组,有0、1、2轴。

import numpy as np
a = np.array(np.arange(24).reshape((4,3,2)))
                    
print('取整个:')
print(a[...])
print(a)

print('取行:')
print(a[1])

print('取连续多行:')
print(a[:-1])

print('取不连续多行:')
print(a[1:3])

print('取列:')
print(a[:,2])

print('取连续的多列:')
print(a[:,:-1])

print('取不连续的多列:')
print(a[:,1:2])

print('取多行多列:')
print(a[:3,:2,])

通过布尔索引修改数组的值

import numpy as np
a = np.array(np.arange(24).reshape((4,3,2)))

print(a < 10)    #[[[ True  True]
                 #  [ True  True]
                 #  [ True  True]]
                
                 # [[ True  True]
                 #  [ True  True]
                 #  [False False]]
                
                 # [[False False]
                 #  [False False]
                 #  [False False]]
                
                 # [[False False]
                 #  [False False]
                 #  [False False]]]
a[a < 10]=0
print(a)         #[[[ 0  0]
                 #  [ 0  0]
                 #  [ 0  0]]
                
                 # [[ 0  0]
                 #  [ 0  0]
                 #  [10 11]]
                
                 # [[12 13]
                 #  [14 15]
                 #  [16 17]]
                
                 # [[18 19]
                 #  [20 21]
                 #  [22 23]]]
a[a >= 10]=20
print(a)         #[[[ 0  0]
                 #  [ 0  0]
                 #  [ 0  0]]
                
                 # [[ 0  0]
                 #  [ 0  0]
                 #  [20 20]]
                
                 # [[20 20]
                 #  [20 20]
                 #  [20 20]]
                
                 # [[20 20]
                 #  [20 20]
                 #  [20 20]]]
View Code

①np.arange()

作用:创建自定义数组

start:起始值,默认为0

stop:终止值(不包含)

step:步长,默认为1

dtype:返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。

import numpy as np
a = np.arange(10,20,2,dtype = float)
print(a)        #[10. 12. 14. 16. 18.]
print(a.dtype)  #float64

②np.resize()

作用:修改数组形状

a = a.reshape((5,1))
print(a)    #[[10.]
            # [12.]
            # [14.]
            # [16.]
            # [18.]]
a = a.reshape((1,5))
print(a)    #[[10. 12. 14. 16. 18.]]

③np.flatten()

作用:将数据进行扁平化

import numpy as np
a = np.arange(10,dtype = float).reshape((2,5))
print(a)              #[[0. 1. 2. 3. 4.]
                      #[5. 6. 7. 8. 9.]]
print(a.flatten())    #[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

④np.array()

作用:生成np.ndarray类型的数组

import numpy as np
a = np.array(np.arange(10))
print(type(a),a)    #<class 'numpy.ndarray'> [0 1 2 3 4 5 6 7 8 9]

⑤np.astype()

作用:修改数据的类型

import numpy as np
a = np.array(np.arange(5),dtype=np.bool)
print(type(a),a)    # <class 'numpy.ndarray'> [False  True  True  True  True]

a = a.astype(np.float32)
print(type(a),a)    # <class 'numpy.ndarray'> [0. 1. 1. 1. 1.]

⑥np.round()

作用:给数据指定取小数

import numpy as np
a = np.array([np.random.rand() for i in range(10)],dtype=np.float32)
#取两位小数
a = np.round(a,2)       #[0.8  0.84 0.95 0.26 0.17 0.56 0.55 0.89 0.17 0.58]
print(a)

⑦np.where()

作用:类似python的三目运算符

import numpy as np
a = np.array(np.arange(24).reshape((4,3,2)))
a = np.where(a > 10,5,3)
print(a)     #[[[3 3]
             #  [3 3]
             #  [3 3]]
            
             # [[3 3]
             #  [3 3]
             #  [3 5]]
            
             # [[5 5]
             #  [5 5]
             #  [5 5]]
            
             # [[5 5]
             #  [5 5]
             #  [5 5]]]

⑧np.clip()

作用:把数组的值限制在a_min,a_max之间,大于a_max就使这个值等于a_max,小于a_min就使这个值等于a_min

import numpy as np
a = np.array(np.arange(10).reshape((2,5,1)))
a = a.clip(3,5)
print(a)     #[[[3]
             #  [3]
             #  [3]
             #  [3]
             #  [4]]
            
             # [[5]
             #  [5]
             #  [5]
             #  [5]
             #  [5]]]

⑨np.vstack()、np.hstack()

作用:把数组进行垂直拼接和水平拼接

import numpy as np
a = np.array(np.arange(10))
b = np.array(np.arange(10,20))
print(a)                #[0 1 2 3 4 5 6 7 8 9]
print(b)                #[10 11 12 13 14 15 16 17 18 19]

#垂直拼接
a_v_b = np.vstack((a,b))
print(a_v_b)            #[[ 0  1  2  3  4  5  6  7  8  9]
                        # [10 11 12 13 14 15 16 17 18 19]]
#水平拼接
a_h_b = np.hstack(((a,b)))
print(a_h_b)            #[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]

⑩np.argmax()、np.argmin()

作用:找出最大或最小的参数

import numpy as np
a = np.array([np.random.randint(0,100) for i in range(10)])
print(a)                            #[42 61 37 95 47  8 24 79 92 51]
print('a maxarg:',np.argmax(a))     #a maxarg: 3
print('a minarg:',np.argmin(a))     #a minarg: 5
print('a max:',np.max(a))           #a max: 95
print('a min:',np.min(a))           #a min: 8

⑪np.random.uniform()

low:采样下界,float类型,默认值0

high:采样上界,float类型,默认值1

size:输出目标样本数目,可以int也可以tuple

import numpy as np
a = np.random.uniform(1,3,(2,3))        
b = np.random.uniform(2,3,4)            
print(a)        #[[1.99346576 1.58600127 1.00780443]
                # [2.34397263 1.15202644 1.88763743]]
print(b)        #[2.89086976 2.1703291  2.80912443 2.04031375]

计算:

例1:

import numpy as np
a = np.arange(20,dtype = float).reshape((2,5,2))
# b = np.arange(40,dtype = float).reshape((4,5,2))

print(a + 2)     # [[[ 2.  3.]
                 #  [ 4.  5.]
                 #  [ 6.  7.]
                 #  [ 8.  9.]
                 #  [10. 11.]]
                
                 # [[12. 13.]
                 #  [14. 15.]
                 #  [16. 17.]
                 #  [18. 19.]
                 #  [20. 21.]]]
                 
print(a - 2)    
                 # [[[-2. -1.]
                 #  [ 0.  1.]
                 #  [ 2.  3.]
                 #  [ 4.  5.]
                 #  [ 6.  7.]]
                
                 # [[ 8.  9.]
                 #  [10. 11.]
                 #  [12. 13.]
                 #  [14. 15.]
                 #  [16. 17.]]]          
                 
print(a * 2)     # [[[ 0.  2.]
                 #  [ 4.  6.]
                 #  [ 8. 10.]
                 #  [12. 14.]
                 #  [16. 18.]]
               
                 # [[20. 22.]
                 #  [24. 26.]
                 #  [28. 30.]
                 #  [32. 34.]
                 #  [36. 38.]]]
                 
print(a / 0)     # [[[nan inf]
                 #  [inf inf]
                 #  [inf inf]
                 #  [inf inf]
                 #  [inf inf]]
                
                 # [[inf inf]
                 #  [inf inf]
                 #  [inf inf]
                 #  [inf inf]
                 #  [inf inf]]]  
View Code 

例2:

特性:一些不同维度的数组也能够通过他们的后缘维度,即从末尾开始算起的维度的轴长度相符或者其中一方的长度为1,则认为他们是广播兼容的,广播会在缺失和长度为1的维度上进行。

import numpy as np
a1 = np.arange(20,dtype = float).reshape((2,5,2))
b1= np.arange(10,dtype = float).reshape((5,2))
print(a1 + b1)       #  [[[ 0.  2.]
                     #  [ 4.  6.]
                     #  [ 8. 10.]
                     #  [12. 14.]
                     #  [16. 18.]]
                    
                     # [[10. 12.]
                     #  [14. 16.]
                     #  [18. 20.]
                     #  [22. 24.]
                     #  [26. 28.]]]

a2 = np.arange(20,dtype = float).reshape((2,5,2))
b2 = np.arange(5,dtype = float).reshape((5,1))
print(a2 + b2)       #  [[[ 0.  1.]
                     #  [ 3.  4.]
                     #  [ 6.  7.]
                     #  [ 9. 10.]
                     #  [12. 13.]]
                   
                     # [[10. 11.]
                     #  [13. 14.]
                     #  [16. 17.]
                     #  [19. 20.]
                     #  [22. 23.]]]

其他:

1.numpy中的nan(NAN,NAN):not a number表示的是不是一个数字,我们在读取本地文件为float时,如果有缺失,就会出现nan,像做了一个不合适的计算时。

2.inf(-inf,inf):infinity.inf表示正无穷,-inf表示负正无穷

import numpy as np
a = np.nan
b = np.nan

#1.两个nan是不相等的
print(a==b)                             #False
print(a!=b)                             #True

#2.判断数组中nan的个数
c = np.array([1,2,np.nan,np.nan])
print(np.count_nonzero(c!=c))           #2

#3.判断数据是否为nan,并将它替换
c[np.isnan(c)]=0
print(c)                                #[1. 2. 0. 0.]

#4.nan和任何值计算都为nan
print(np.nan+6)                         #nan

注意:

在一组数据中单纯的把nan值替换为0,替换之前平均值如果都大于0,替换之后的均值肯定会更小,所以一般的方式是把缺失的值替换为均值(中值)或者是删除有缺失的一行。

原文地址:https://www.cnblogs.com/Fantac/p/13779006.html