n维数组ndarray
-
python
中的数组- 形式
- 用
list
和tuple
等序列数据结构结构表示的数组 array
模块 (非内置模块 不支持多维)- 通过
array
函数创建数组 ,array.array('B',range(5))
- 提供
append
insert
read
等方法
- 通过
- 用
- 形式
-
ndarray
-
特点
- N维数组
NumPy
中基本的数据结构- 所有元素是同一种类型 不像列表那样包含多类但存大量指针和空间
- 别名为
array
- 利于节省内存和提高
CPU
计算时间 - 有丰富的函数
-
基本概念
- 维度 成为轴 轴的个数称为秩
- 基本属性
ndarray.ndim
秩ndiarray.shape
维度ndarray.size
元素总个数ndarray.dtype
元素类型ndarray.itemsize
元素字节大小
-
创建与使用
import numpy as np aArray=np.array([1,2,3]) aArray Out[3]: array([1, 2, 3]) bArray=np.array([(1,2,3),(4,5,6)]) bArray Out[5]: array([[1, 2, 3], [4, 5, 6]]) np.arange(1,5,0.6) Out[7]: array([1. , 1.6, 2.2, 2.8, 3.4, 4. , 4.6]) np.random.random((2,2)) Out[8]: array([[0.52820866, 0.42113216], [0.48049641, 0.5325641 ]]) np.linspace(1,2,10,endpoint=False) Out[9]: array([1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9]) np.ones([2,3]) Out[10]: array([[1., 1., 1.], [1., 1., 1.]]) np.zeros([2,3]) Out[11]: array([[0., 0., 0.], [0., 0., 0.]]) np.fromfunction(lambda i,j:(i+1)*(j+1),(9,9)) Out[12]: array([[ 1., 2., 3., 4., 5., 6., 7., 8., 9.], [ 2., 4., 6., 8., 10., 12., 14., 16., 18.], [ 3., 6., 9., 12., 15., 18., 21., 24., 27.], [ 4., 8., 12., 16., 20., 24., 28., 32., 36.], [ 5., 10., 15., 20., 25., 30., 35., 40., 45.], [ 6., 12., 18., 24., 30., 36., 42., 48., 54.], [ 7., 14., 21., 28., 35., 42., 49., 56., 63.], [ 8., 16., 24., 32., 40., 48., 56., 64., 72.], [ 9., 18., 27., 36., 45., 54., 63., 72., 81.]]) x=np.fromfunction(lambda i,j:(i+1)*(j+1),(9,9)) x.ndim Out[14]: 2 x.shape Out[15]: (9, 9) x.size Out[16]: 81
bArray Out[18]: array([[1, 2, 3], [4, 5, 6]]) print(bArray[1]) [4 5 6] print(bArray[0:2]) #切片 选择0和1行 [[1 2 3] [4 5 6]] print(bArray[:,[0,1]]) #选择第0和1列 [[1 2] [4 5]] print(bArray[1,[0,1]]) #选择第1行 第0和1列 [4 5] for row in bArray: print(row) [1 2 3] [4 5 6] print(bArray.reshape(3,2)) #原多维数组不改变 [[1 2] [3 4] [5 6]] bArray.resize(3,2) #改变多维数组本身 bArray Out[27]: array([[1, 2], [3, 4], [5, 6]]) bArray=np.array([1,2,3]) cArray=np.array([4,5,6]) np.vstack((bArray,cArray)) #在垂直方向拼接 Out[30]: array([[1, 2, 3], [4, 5, 6]]) np.hstack((bArray,cArray)) #在水平方向拼接 Out[31]: array([1, 2, 3, 4, 5, 6])
-
ndarray
的运算aArray=np.array([(5,5,5),(2,2,2)]) bArray=np.array([(5,5,5),(1,2,3)]) cArray=aArray*bArray cArray Out[36]: array([[25, 25, 25], [ 2, 4, 6]]) aArray+=bArray aArray Out[38]: array([[10, 10, 10], [ 3, 4, 5]]) a=np.array([1,2,3]) b=np.array([[1,2,3],[4,5,6]]) a+b #广播 Out[42]: array([[2, 4, 6], [5, 7, 9]]) b.sum() Out[45]: 21 b.sum(axis=0) Out[46]: array([5, 7, 9]) b.sum(axis=1) Out[47]: array([ 6, 15]) b.mean() #平均值 Out[48]: 3.5 b.var() #方差 Out[49]: 2.9166666666666665 b.std() #标准差 Out[50]: 1.707825127659933
-
ndarray
的专门应用 - 线性代数-
dot
矩阵内积linalg.det
行列式linalg.inv
逆矩阵linalg.solve
多元一次方程求根linalg.eig
求特征值和特征向量import numpy as np x=np.array([[1,2],[3,4]]) r1=np.linalg.det(x) r1 Out[53]: -2.0000000000000004 r2=np.linalg.inv(x) r2 Out[55]: array([[-2. , 1. ], [ 1.5, -0.5]]) r3=np.dot(x,x) r3 Out[57]: array([[ 7, 10], [15, 22]])
-
-
ndarray
的ufunc
函数- 一种可以对数组的每个元素进行操作的函数 很多是基于
C
语言级别实现 计算速度很快
- 一种可以对数组的每个元素进行操作的函数 很多是基于
-
变长字典 Series
-
基本特征
-
类似一位数组的对象
-
由数据和索引(自带)组成
import pandas as pd from pandas import Series aSer=pd.Series([1,2.3,'a']) aSer Out[3]: 0 1 1 2.3 2 a dtype: object
-
自定义
Series
的index
bSer=pd.Series(['apple','peach','lemon'],index=[1,2,3]) bSer Out[5]: 1 apple 2 peach 3 lemon dtype: object bSer.index Out[6]: Int64Index([1, 2, 3], dtype='int64') bSer.values Out[7]: array(['apple', 'peach', 'lemon'], dtype=object)
-
Series
的基本运算aSer=Series([3,5,7],index=[1,2,3]) aSer[2] Out[11]: 5 aSer**2 Out[12]: 1 9 2 25 3 49 dtype: int64 import numpy as np np.exp(aSer) Out[14]: 1 20.085537 2 148.413159 3 1096.633158 dtype: float64
-
Series
的数据对齐 在算术运算中会自动对齐不同索引的数据data={'axp':'23.2','csco':'122','ba':'99'} sindex=['axp','csco','ba','apple'] aSer=pd.Series(data,index=sindex) aSer Out[29]: axp 23.2 csco 122 ba 99 apple NaN dtype: object pd.isnull(aSer) Out[30]: axp False csco False ba False apple True dtype: bool
-
Series
的name
属性-
Series
对象本身 索引均有一个name
属性 -
Series
的name
属性与其重要功能关系密切aSer.name='cnames' aSer.index.name='volume' aSer Out[53]: volume axp 3 csco 122 ba 99 apple NaN Name: cnames, dtype: object
-
-
数据表 DataFrame
-
基本特征
- 一个表格型的数据结构
- 含有一组有序的列(类似于
index
) - 大致可以看成共享同一个
index
的Series
集合
-
创建与使用
data={'name':['peter','marry','bush'],'pay':[6000,7000,8000]} frame=pd.DataFrame(data) frame Out[57]: name pay 0 peter 6000 1 marry 7000 2 bush 8000 data=np.array([('peter',6000),('marry',7000),('bush',8000)]) frame=pd.DataFrame(data,index=range(1,4),columns=['name','pay']) frame Out[62]: name pay 1 peter 6000 2 marry 7000 3 bush 8000 frame.index Out[63]: RangeIndex(start=1, stop=4, step=1) frame.columns Out[64]: Index(['name', 'pay'], dtype='object') frame.values Out[65]: array([['peter', '6000'], ['marry', '7000'], ['bush', '8000']], dtype=object)
-
基本操作
- 取
DataFrame
对象的列和行 区间值
n [66]: frame['name'] Out[66]: 1 peter 2 marry 3 bush Name: name, dtype: object frame.pay Out[67]: 1 6000 2 7000 3 8000 Name: pay, dtype: object frame.iloc[:2,1] #二维操作 行列[n:m,a:b] n行到m行的a列到b列 Out[68]: 1 6000 2 7000 Name: pay, dtype: object frame.iloc[1:2,1] Out[69]: 2 7000 Name: pay, dtype: object frame.iloc[1:2,0:2] Out[70]: name pay 2 marry 7000
-
DataFrame
对象的修改删除 -
DataFrame
的统计功能frame.pay.min() Out[76]: '6000' frame[frame.pay>='5000'] Out[77]: person name pay 1 peter 6000 2 marry 7000 3 bush 8000
- 取