Python数据处理学习笔记

一、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')
#x[0,0]返回行下标和列下标都为0的元素
#对于矩阵来说,x[0,0]和x[0][0]的含义不一样
	[[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的形式迭代行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值