一、numpy数组操作
1、numpy库概述
Python中用list保存一组值,可用来当作数组使用。列表的元素可以是任何对象,因此列表中所保存的是对象的指针,比较浪费内存和CPU计算时间。
Python提供一个array模块,它直接保存数值,不支持多维,没有各种运算函数,因此不适合做数值运算。
numpy提供ndarry对象,它是存储单一数据类型的多维数组。
2、ndarry数组操作
N维数组对象ndarry是用于存放同类型元素的多维数组。
ndarry中的每个元素在内存中都有相同存储大小的区域。
ndarry中的每个元素是数据类型的对象。
可以通过数组进行索引和切片。
numpy之创建数组:
numpy.array(object,dtype=None,copy=true,order=None,subok=False,ndmin=0)
object:数组或嵌套的数列
dtype:数组元素的数据类型,可选
copy:对象是否需要复制,可选
order:创建数组的样式,C为行方式,F为列方向,A为任意方向(默认)
subok:默认返回一个与基类类型一致的数组
ndmin:指定生成数组的最小维度
import numpy as np
a= [ 1 , 2 , 3 , 4 ]
b= np. array( a)
print ( b)
也可以利用其他的一些函数来新建数组:
zeros和ones分别可以创建指定长度或形状的全0或全1数组
import numpy as np
print ( np. zeros( 3 ) )
[0. 0. 0.]
import numpy as np
print ( np. zeros( ( 3 , 3 ) ) )
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
import numpy as np
print ( np. identity( 3 ) )
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
创建随机数组:
均匀分布:
np.random.rand(10,10) 创建指定形状的数组(范围在0至1之间)
np.random.uniform(0,100) 创建指定范围的一个数
np.random.randint(0,100) 创建指定范围内的一个整数
正态分布:
np.random.normal(1.7,0.1,(2,3)) 给定均值/标准差/维度的正态分布
import numpy as np
np. random. randint( 0 , 50 , 5 )
array([33, 12, 47, 44, 42])
import numpy as np
np. random. randint( 0 , 50 , ( 3 , 5 ) )
array([[37, 29, 8, 45, 17],
[ 6, 1, 15, 49, 43],
[ 3, 41, 47, 7, 16]])
import numpy as np
np. random. rand( 5 )
array([0.23054306, 0.7624328 , 0.66160683, 0.88441978, 0.92619555])
查看数组属性的用法:
b.size:数组元素个数
b.shape:数组形状
b.ndim:数组维度
b.dtype:数组元素类型
b.Itemsize:数组元素字节大小
数组和标量之间的运算:
矢量化:不用通过编写循环即可对数据执行批量运算
大小相等的数组之间的任何算术运算都会将运算应用到元素级
import numpy as np
arr= np. array( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )
print ( arr- arr)
[[0 0 0]
[0 0 0]]
import numpy as np
arr= np. array( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )
print ( 1 / arr)
[[1. 0.5 0.33333333]
[0.25 0.2 0.16666667]]
数学和统计方法:
sum:对数组中全部或某周详的元素求和。零长度的数组sum为0
mean:算术平均数,零长度的数组mean为NaN
std,var:标准差和方差,自由度可调
min,max:最小值,最大值
argmin,argmax:分别为最小元素和最大元素的索引
cumsum:所有元素的累加
cumpord:所有元素的累积
二、numpy矩阵操作
numpy矩阵库(Matrix):
NumPy中包含了一个矩阵库numpy.matlib,该模块中的函数返回的是一个矩阵,而不是一个ndarry对象
矩阵里的元素可以使数字、符号或数学式
对于多维数组的运算,缺省情况下并不使用矩阵运算
numpy矩阵生成:
import numpy as np
x= np. matrix( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )
y= np. matrix( [ 1 , 2 , 3 , 4 , 5 , 6 ] )
print ( x, y, x[ 0 , 0 ] , x[ 0 ] [ 0 ] , sep= '\n\n' )
[[1 2 3]
[4 5 6]]
[[1 2 3 4 5 6]]
1
[[1 2 3]]
matlib.empty(shape,dtype,order):
shape:定义新矩阵形状的整数或整数元组
dtype:可选,数据类型
order:C(行序优先)或F(列序优先)
import numpy. matlib
import numpy as np
print ( np. matlib. empty( ( 3 , 3 ) ) )
[[0.00000000e+000 0.00000000e+000 0.00000000e+000]
[0.00000000e+000 0.00000000e+000 6.04736351e-321]
[1.24610723e-306 1.37962320e-306 1.29060871e-306]]
numpy.matlib.zeros():
import numpy. matlib
import numpy as np
print ( np. matlib. zeros( ( 3 , 3 ) ) )
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
numpy.matlib.ones():
import numpy. matlib
import numpy as np
print ( np. matlib. ones( ( 3 , 3 ) ) )
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
np.matlib.eye(n,M,k,dtype):
返回对角矩阵
n:返回矩阵行数
M:返回矩阵列数,默认为n
k:对角线索引
dtype:数据类型
import numpy. matlib
import numpy as np
print ( np. matlib. eye( n= 3 , M= 4 , k= 0 , dtype= int ) )
[[1 0 0 0]
[0 1 0 0]
[0 0 1 0]]
numpy.matlib.identity():
返回给定大小的单位矩阵
import numpy. matlib
import numpy as np
print ( np. matlib. identity( 4 ) )
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
numpy.matlib.rand(m,n):生成m行n列的随机矩阵
常用的矩阵操作:
矩阵与二维数组相互转换:
矩阵总是二维的,而ndarry是一个n维数组,两个对象是可以互换的
import numpy as np
import numpy. matlib
i= np. matrix( '1,2;3,4' )
print ( i)
j= np. asarray( i)
print ( j)
k= np. asmatrix( j)
print ( k)
[[1 2]
[3 4]]
[[1 2]
[3 4]]
[[1 2]
[3 4]]
矩阵转置:
import numpy as np
x= np. matrix( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )
y= np. matrix( [ 1 , 2 , 3 , 4 , 5 , 6 ] )
print ( x. T, y. T, sep= '\n' )
[[1 4]
[2 5]
[3 6]]
[[1]
[2]
[3]
[4]
[5]
[6]]
查看矩阵特征:
import numpy as np
x= np. matrix( [ [ 1 , 2 , 4 ] , [ 4 , 5 , 6 ] ] )
print ( x. mean( ) , end= '\n===\n' )
print ( x. mean( axis= 0 ) , end= '\n===\n' )
print ( x. mean( axis= 1 ) , end= '\n===\n' )
print ( x. sum ( ) , end= '\n===\n' )
print ( x. max ( axis= 1 ) , end= '\n===\n' )
print ( x. argmax( axis= 1 ) , end= '\n===\n' )
3.6666666666666665
===
[[2.5 3.5 5. ]]
===
[[2.33333333]
[5. ]]
===
22
===
[[4]
[6]]
===
[[2]
[2]]
===
矩阵乘法:
import numpy as np
x= np. matrix( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )
y= np. matrix( [ [ 1 , 2 ] , [ 3 , 4 ] , [ 5 , 6 ] ] )
print ( x* y)
[[22 28]
[49 64]]
numpy矩阵运算:
numpy.dot():两个数组的点积,即元素对应相乘
np.vdot():返回两个向量的点积(数)
numpy.linglg.inv():计算逆矩阵
numpy.linalg,solve():求矩阵形式的线性方程组的解
三、pandas数据结构
Pandas是基于Numpy的一种工具,是为了解决数据分析任务而创建的
Pandas吸入了大量库和一些标准的数据模型,提供了高效的操作大型数据集所需工具
Pandas库介绍:
pandas是python的第三方库,基于numpy实现,常与numpy和matplotlib一同使用
pandas有两大核心数据结构:Series(一维数据)和DataFrame(多特征数据,既有行索引,也有列索引)
Series:
一维数组,与Numpy中的一维数组array类似
array和Series中只允许存储相同的数据类型
Time-Series:以时间为索引的Series
DataFrame:带标签且大小可变的二维表格型数据结构,可以将DatFrame理解为Series的容器
Panel:三维数组,可以理解为DataFrame的容器
Series:
Series是一种类似于一维数组的对象,它由一维数组(各种numpy数据类型)以及一组与之相关的数据标签(即索引)组成
Series的创建:
使用Python数组创建:
使用numpy数组创建:
使用Python字典创建:
import pandas as pd
import numpy as np
print ( pd. Series( [ 11 , 12 ] , index= [ "北京" , "上海" ] ) )
北京 11
上海 12
dtype: int64
import pandas as pd
import numpy as np
print ( pd. Series( np. arange( 3 , 6 ) ) )
0 3
1 4
2 5
dtype: int32
import pandas as pd
import numpy as np
print ( pd. Series( { "北京" : 11 , "上海" : 12 , "深圳" : 14 } ) )
北京 11
上海 12
深圳 14
dtype: int64
如果没有为数据指定索引,则自动创建一个0到N-1的整形索引
Series会自动对齐不同索引的数据
Series对象本身及其索引都有一个name属性
Series的索引可以通过赋值的方式就地修改
DataFrame:
特点:
潜在的列是不同的类型
大小可变
标记轴(行和列)
可以对行和列进行算术运算
DataFrame构造函数
pandas.DataFrame(data,index,columns,dtype,copy)
创建一个空的DataFrame:函数不指定参数返回空DataFrame
import pandas as pd
df= pd. DataFrame( )
print ( df)
Empty DataFrame
Columns: []
Index: []
从列表创建DataFrame;
import pandas as pd
data= [ 1 , 2 , 3 , 4 ]
df= pd. DataFrame( data)
print ( df)
0
0 1
1 2
2 3
3 4
import pandas as pd
data= [ [ 'Alex' , 10 ] , [ 'Bob' , 12 ] , [ "Clarke" , 13 ] ]
df= pd. DataFrame( data, columns= [ 'Name' , 'Age' ] , dtype= float )
print ( df)
Name Age
0 Alex 10.0
1 Bob 12.0
2 Clarke 13.0
由等长的列表或numpy数组组成的字典创建DataFrame
DataFrame结果会自动加上索引,且全部会被有序排列
del用于删除列
四、pandas常用方法
数据读取与写入:
Pandas支持常用的文本格式数据(csv、json、html、剪贴板)、二进制数据(Excel,hdf5格式、Feather格式、Parquet格式Msgpack、Stata、SAS、kpl)、SQL数据等
一般情况下,读取文件的方法以pd.read_开头,而写入文件的方法以pd.to_开头
数据类型 描述符 读方法 写方法
text CSV read_csv to_csv
text JSON read_json to_json
text HTML read_csv to_csv
text 剪贴板 read_clipboard to_clipboard
二进制 Excel read_excel to_excel
二进制 HDF5 read_hdf to_hdf
二进制 PKL read_pickle to_pickle
SQL SQL read_sql to_sql
描述性统计方法:
count() 非空观测数量
sum() 所有值之和
mean() 所有值的平均值
median() 所有值的中位数
mode() 值的模值
std() 值的标准偏差
max()
min()
abs()
prod() 数组元素的乘积
cumsum() 累计总和
cumprod() 累积乘积
describe() 描述性统计信息摘要
迭代与遍历:
pandas对象之间的基本迭代的行为取决于类型
简而言之,基本迭代产生:
Series-值
DataFrame=列标签
要遍历数据帧(DataFrame)中的行,可以使用以下函数:
interitems()-迭代(key,value)对
interrows()-将行迭代为(索引,系列)对
iteruples()-以namedtuples的形式迭代行