Python数据分析-Numpy

Numpy

个人笔记,仅供参考,谢谢

导入

import numpy
import numpy as np
from numpy import *

Numpy数组对象

  1. 引入
# 让列表+1
a = [1,2,3,4],b = [4,5,6,7]
[x+1 for x in a]
# 实现a+b
a + b => [1,2,3,4,5,6,7,8]
[x + y for (x,y) in zip(a,b)]
-----------
# numpy
a = np.array([1,2,3,4])
a+1 => array([2,3,4,5])
b = np.array([2,3,4,5])
a + b =>array([3,5,7,9])
  1. 产生数组
# 从列表产生:
lst = [1,2,3]
a = np.array(lst)
# 从列表传入
a = np.array([1,2,3])
# 生成全0数组
np.zeros(5)
=> array([0.,0.,0.,0.,0.,]) # 默认浮点数
# 生成全1数组
np.ones(3)
=> array([1.,1.,1.])
np.ones(3,dtype='int') # 转换为整型,bool...
# fill 填充
a=np.array([1,2,3])
a.fill(6) # 所有元素变为6,长度取决于a原先的长度
a.fill(2.5) # 得到2,因为dtype = int,与列表不同
a = a.astype('float') # 类型强转

  1. 生成整数序列
a=np.arange(1,10) # 左闭右开,默认增1
a=np.arange(1,10,2) # (left, right, step)
  1. 生成等差序列
a = np.linspace(1,10,4) # 等差数列,左闭右闭,4为数列长度
  1. 生成随机数
np.random.rand(10) # 产生[0,1)的10个随机数
np.random.randn(10) # 产生标准正态分布[0,1)的10个随机数
np.random.randint(1,10,6)# 从1 到 10 的6个随机整数
  1. 数组属性
# 数组的数据类型
type(a)
# 查看数组元素数据类型
a.dtype
# 查看性状,每维的长度(n,m)
a.shape
# 查看元素数目
a.size
# 查看维度 1,2,3...
a.ndim
  1. 索引与切片
# 索引
a=np.array([0,1,2,3])
a[0] # 索引
a[0] = 1 # 修改py
# 切片,支持负索引
a[1:3] # 左闭右开
<=> a[1:-2] <=> a[-3,3]
# 省略参数
a[-2:] # -2到最后
a[::2] <=> a[1:a.size:2]
# 差分
a=[1,2,3,4]
rst = a[1:] - a[:-1]

多维数组及其属性

  1. 定义
a = np.array([[1,2],[3,4]]) # 二维数组,广义表
np.array([[[1,2],[2,0]],[[3,5],[6,7]]])
# 从外到内每对括号降一次维度
a.shape => (2,4) ; 24列
a.size  => 4
a.ndim	=> 2
  1. 索引
a[1,1] => 4
a[0,0] => 1
a[0,1] = -1 # 赋值操作
a[1] => [1,2] # 
a[:,1] => array([1, 11]) # 第二列

  1. 多维数组切片
a = np.array([0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45])
a[0,3:5] # 第一行的3-4号元素,左闭右开
a[4:,4:] # 得到第4,5行的最后两列
# 对于每一维都支持切片的规则,包括父索引
[lower:upper:step]
a[::2,:] # 取出奇数行
  1. 切片是引用
a=np.array([0,1,2,3,4])
b=a[2:4]
print(b)
b[0]=10
a # a 的值已经发生改变。 // 如果是列表则产生新列表
# 解决方案
a=np.array([0,1,2,3,4])
b=a[2:4].copy(); # 调用数组的方法
  1. 花式索引
a=np.arange(0,100,10)
index = [1,2,-3]
y = a[index]; # 666,玩的真花啊
# 布尔数组
mask = np.array([0,1,0,1,0,1,0,1,1,0],dtype=bool)
a[mask]; # 顾名思义,mask,必须与a等长
# 二维花式
a = np.array([0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55])
取出次对角线的5个值:
 a[(0,1,2,3,4),(1,2,3,4,5)] # 一一对应成对
取出最后三行135列
a[3:,[1,2,5]]; # 
a[:3],取出前三行
a[:,:3],取出前三列
a[:2,:3] 取出前2行三列
# 花式bool
mask=np.array([0,1,1,0,1,0]);
a[mask]; # 取出2,3,5行

where语句

a=np.array([0,12,5,20])
a > 10 # 返回array(false,true,false,true)
np.where(a > 10);# 返回所有大于10元素的索引位置
# 返回的是一个元组
a[a>10]; # 返回大于10的元素,花式了
a[np.where(a>10)] # 同样

数组类型

  • 类型转换
a = np.array([1,5,-3],dtype=float)
a = np.array([1,2,3])
b = np.asarray(a,dtype=float)
b = a.astype(float)

数组操作

  • sort函数
a = np.array(1,3,2)
b = np.sort(a) # 默认升序

  • argsort函数
order = np.argsort(a)  # 得到排序后元素在原来数组中的位置
  • 聚合函数
np.sum(a)
# a.sum()
np.max(a)
# a.max()
np.min(a)
# a.min()
np.mean()
# a.mean()
np.std()
#np.std() 标准差
np.cov(a,b) # 相关系数矩阵
  • 数组形状

    a=np.arange(6)
    a.shape = 2,3
    b = a.reshape(2,3)
    
  • 转置

a.T # /a.transpose(), 不改变原值
  • 数组连接
concatenate((a0,a1,...,an),axis=0)
x = np.array([[0,1,2],[10,11,12]])
y = np.array([[50,51,52],[60,61,62]])
print(x.shape)
print(y.shape)
# 默认沿着第一维连接, 最内侧的括号是第一维
z = np.concatenate(x,y)
z = np.concatenate((x,y),axis = 1)
# 堆叠函数 
np.vstack((x,y))
np.hstack((x,y))
np.dstack((x,y)) # 3维

内置函数

np.abs(a)
np.exp(a)
np.median(a) # 中值
np.cumsum(a) # 前缀和
...

练习

import numpy as np
a = np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])
a
array([[ 0,  1,  2,  3,  4,  5],
       [10, 11, 12, 13, 14, 15],
       [20, 21, 22, 23, 24, 25],
       [30, 31, 32, 33, 34, 35],
       [40, 41, 42, 43, 44, 45],
       [50, 51, 52, 53, 54, 55]])
a[:2,:3]
array([[ 0,  1,  2],
       [10, 11, 12]])
b=np.array([0,2,66,2,77])
b[np.where(b<10)]
np.where(b<10)
(array([0, 1, 3], dtype=int64),)
a=np.array([1,2,3])
np.asarray(a,float)
array([1., 2., 3.])
a = np.array([1,2,3])
b = np.array([2,4,5])
np.cov(a,b)
array([[1.        , 1.5       ],
       [1.5       , 2.33333333]])
import pandas as pd
a = pd.Series([1,2,3],index = ['a',2,3])
a['a']
a.values
a.astype(float)
a.name
a
a    1
2    2
3    3
dtype: int64
import numpy as np
a = np.array([3]*4)
a
array([3, 3, 3, 3])
df2 = pd.DataFrame({'A':1.,'B':pd.Timestamp('20181001'),'C':pd.Series(1,index=list(range(4)),dtype = float),'D':np.array([3]*4,dtype=float),'E':
pd.Categorical(['test','train','test','train']),'F':'anc'})
df2
A B C D E F
0 1.0 2018-10-01 1.0 3.0 test anc
1 1.0 2018-10-01 1.0 3.0 train anc
2 1.0 2018-10-01 1.0 3.0 test anc
3 1.0 2018-10-01 1.0 3.0 train anc
df2.drop(['A','B'],axis = 1)
C D E F
0 1.0 3.0 test anc
1 1.0 3.0 train anc
2 1.0 3.0 test anc
3 1.0 3.0 train anc
df2.index = list('abcd')
df2
df2.loc['a','B']
Timestamp('2018-10-01 00:00:00')
df2
df2.loc['a','E'] = np.nan
df2.dropna(inplace=True)
df2[]
A B C D E F
b 1.0 2018-10-01 1.0 3.0 train anc
c 1.0 2018-10-01 1.0 3.0 test anc
d 1.0 2018-10-01 1.0 3.0 train anc

你可能感兴趣的:(Python数据分析,python,数据分析,numpy)