python数据分析-Numpy自学笔记

matplotlib画图,numpy处理数值型数据,pandas在numpy基础上处理所有数据类型

numpy是python的一个基础库,重在数值计算,多用于在大型、多维数组上执行数值运算

1.创建数组(矩阵)

# 创建数组

import numpy as np

a=np.array( [1,2,3,4,5], dtype='int64')

b=np.array( range(1,6), dtype='float32')

c=np.arange(1, 6, 步长, dtype=数据类型)

print(b.dtype)

#astype是返回一个修改后的数组

d=c.astype(np.int8)

d=c.astype('int8')

#random方法返回随机生产的一个[0,1)内的实数

import random

random.random()

numpy.round(数据,保留几位) 

#随机生成有10个数的数组
import numpy, random
e=np.array([random.random() for i in range(10)])
#保留两位小数
e1=np.round(e,2)

2.数组的维度

#数组名.shape显示数组是几行几列几维的

import numpy as np

a = np.array([ [1,2,3],[5,6,7] ])        #两行三列的二维数组

print(a.shape)        #输出(2,3)

数组名.shape[0]        #读取第二维(列)的长度

数组名.shape[1]        #读取第一维(行)的长度

#返回一个修改数组维度后的数组

变量名.reshape( (x,y) )        #将数组修改成x行y列的二维数组

变量名.reshape( (x,y,z) )        #修改成x块y行z列的三维数组

 三维数组:可以理解为有x幢楼,每幢楼y层,每层有z个住户

#二维降成一维

x*y=z

变量名.reshape( (z,) )

 二维1行n列 与 一维 的区别:一维只有一个中括号,二维多了一个中括号

#当不知道数组内有几个个数,将其展成一维

变量名.flatten()

 3.数组的计算

数组与一个数之间的计算

#广播机制

数组*n        #数组里每个数都乘或除以n

数组 +/- n        #数组里每个数都+/-n

0/0在numpy里得出结果nan,意味着这不是一个数

某个数/0得到inf,意味着无穷

数组与数组之间的计算

#同行同列同维的数组运算,同位置数据做加减乘除运算

数组a +/-/*/➗ 数组b 

二维数组与二维数组计算:

例如shape为(3,3)的数组a只能与shape为(1,3)或(3,1)的数组b之间进行运算

依数组a的每行或每列运算过去,最终结果呈现为数组a的形状

三维与二维数组计算:

shape(x,y,z)与shape(y,z)、(1,z)、(y,1)的数组才能进行运算,即要末尾的维度一样 

轴在numpy中可以理解为方向,使用0,1,2...数字表示

对于一个一维数组,只有一个0轴;对于二维数组,有0轴和1轴 ;对于三维数组,有0,1,2轴

二维中:axis=0为跨行,即按列操作,从上到下;axis=1从左到右

三维中:axis=0为从外到内,1为从上到下,2为从左到右

#总计求和

numpy.sum(数组名,axis=)

import numpy as np
a = np.arange(0,24).reshape((4,6))
print(a)
print(np.sum(a))    #整个数组所有数据求和
print('--------------------')
print(np.sum(a,axis=0))     #竖向进行运算,输出一维相加结果数组
print('--------------------')
print(np.sum(a,axis=1))     #横向进行运算,输出一维相加结果数组
'''
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
276
--------------------
[36 40 44 48 52 56]
--------------------
[ 15  51  87 123]
'''

5.索引和切片

#取行

数组名[行数]

#取连续的多行

数组名[起始行:终止行, : ]

#取不连续的行

数组名[ [行数1,行数2,行数3], : ]

#取列

数组名[ : , 列数]

#取连续的多列

数组名[ : , 起始列:终止列]

#取不连续多列

数组名[ : , [列数1,列数2,列数3] ]

逗号前是行,逗号后是列

#取某行某列(例:取第3行第4列的值)

print ( a [ 2, 3 ] )

#取多行和多列(例:取第3行到第5行且第2列到第4列的结果)

print ( a [2:5, 1:4] )

#取多个不相邻的值(例:取坐标为(0,0)、(2,1)、(2,3)的值)

print ( a [ [0,2,2], [0,1,3] ] )

6.布尔索引

数组名 条件        #数组内每个数据进行条件判断,返回全是bool值的数组

数组名 [ 数组名与条件 ]        #返回数组内所有满足条件的数据,reshape成一维数组返回

数组名 [ 数组名与条件 ] = 数值        #将满足条件的值都进行替换

import numpy as np
a = np.arange(0,24).reshape((4,6))
print(a < 10)    #小于10的为True
print ( a[a<10] )    #返回数组a中小于10的数据,自动reshape成一维数组
a [a<10] = 3    #小于10的值都替换成3
print(a)

#不会改变原数组

numpy.where(条件, True的数据返回的值, False的数据返回的值)

import numpy as np
a = np.arange(0,24).reshape((4,6))
print(np.where(a < 10, 3, 30))
np.where(a < 10, 3, 30)     #不会改变原数组
print(a)

clip替换值

#不会改变原数组

数组名.clip(小于该值的数据被替换成该值,大于该值的数据被替换成该值)

import numpy as np
a = np.arange(0,24).reshape((4,6))
a.clip(10,18)
b=a.clip(10,18)
print(a)
print(b)

7.nan与inf

nan:not a number

nan是一个float类型

当提取本地文件类型为float,如果数据缺失就会出现nan;当做了一个不合适的计算,也会出现nan

nan和任何值的计算都是nan

两个任意nan是不相等的;np.nan!=np.nan

#统计数组内有几个数据是0

numpy.count_nonzero(数组名)

#返回数组内是nan的数据为True,其它为False

numpy.isnan(数组名)

#统计数组里有几个nan值

numpy.count_nonzero(numpy.isnan(数组名))

#统计数组里有几个nan值

numpy.count_nonzero(数组名!=数组名)

数组!=数组会显示该数组内是nan的值为False,而True是1、False是0,因此通过数nonzero可以得出数组内有几个nan值 

将nan值替换为平均值

import numpy as np
a = np.arange(0,24).reshape((4,6))
a = a.astype ('float')
a[1,2:] = np.nan

print(a.shape[1])   #返回6,即行的长度6列

def fillnan(ar):
    for i in range( ar.shape[1] ):     #遍历每一列,range()即有几列遍历几次
        a0 = ar[ :, i ]     #当前的一列
        nan_num = np.count_nonzero( a0!=a0 )
        if nan_num != 0:    #不为0,说明这一列中有nan
           not_nan_a0 = a0[ a0==a0]     #当前一列没有nan的数组,bool索引
           #选中当前为nan的位置,把值赋为不为nan的均值
           a0[ np.isnan(a0)] = not_nan_a0.mean()
    return ar

print(a)
a=fillnan(a)
print(a)
import numpy as np
a = np.arange(0,24).reshape((4,6))
a = a.astype('float')   #nan是浮点类型,因此先将数组转化为float类型
a[3,3]=np.nan   #将第4行第4列数据转成nan
print(a)

 shape[1]表示t1这个数列的列数。shape[0]表示行数

inf:infinity

也是一个float类型

8.读取本地数据

loadtxt (fname, dtype=<type 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)

9.数组的拼接、行列交换

拼接

#竖直拼接

numpy.vstack( (数组1,数组2) )

#水平拼接

numpy.hstack( (数组1,数组2) )

行列交换

#行交换

数组名[ [行1,行2], : ] = 数组名[ [行2,行1], : ]

#列交换

数组名[ : , [列1,列2] ] = 数组名[ : , [列2,列1] ]

 10.numpy其它方法

#获取最大值最小值位置

numpy.argmax(数组名, axis=0)        #(每列中最大值位置)

numpy.argmin(数组名, axis=1)        #(每行中最小值位置)

#创建一个全为0的数组

numpy.zeros( (行数,列数) )

#创建一个全为1的数组

numpy.ones( (行数,列数) )

#创建一个对角线全为1的正方形数组

numpy.eye(行数)

numpy生成随机数

numpy.random.seed(s) 

#参数即种子的编号

#随便一个数字作为种子,种子号不变的情况下范围和类型都一样的取随机数结果不变

import numpy as np
np.random.seed(10)
t = np.random.randint(0,20, (3,4))
print(t)    #重复运行会得到一样的数组t的值

11.numpy注意点

a = b                a与b两个变量之间是相互影响的

a = b[ : ]                视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管。a与b的的数据变化是一致的

a = b.copy()             a与b互不影响

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值