思维导图:Numpy+Pandas

4 篇文章 0 订阅
4 篇文章 0 订阅

思维导图:Numpy+Pandas

整理自:莫烦Python
在这里插入图片描述

附:文本结构

Numpy+Pandas
	Numpy
		基于矩阵运算的模块
		数组转矩阵
			A = np.array([[1,2,3],[2,3,4]])
		矩阵属性
			ndim
				维度
			shape
				形状
			size
				元素个数
		创建矩阵
			array
				数组形式初始化
			dtype
				int
				int32
				float
				float32
			ones
				全1的矩阵
			zeros
				全0的矩阵
			empty
				所有元素都接近0的矩阵
			np.random.random
				随机生成指定形状的矩阵
			arange
				(start , end , step)
					区间
						[start,end)
					步长
						step
							默认为 1
			linspace
				(start , end , num)
					区间
						[start,end]
					点的数量
						num
			reshape
				变形
		基本运算
			加减
			N次方
				A**N
			普通乘法(同位置元素相乘)
				*
			矩阵乘法(前者的行元素乘后者的列元素)
				写法1
					np.dot(A, B)
				写法2
					A.dot(B)
		基本运算2
			sum、min、max
				axis=0
					按列计算
				axis=1
					按行计算
				默认不设置axis
					对全部元素
			argmin、argmax
				求最值的索引
			mean、average
				求均值
			median
				中位数
			cumsum
				累加
					[1,2,3,4]=>[1,3,6,10]
			diff
				累差
					[1,2,3,4]
						[1,1,1]
					后项与前项的差值
			nonzero
				找出非零项,并将N维度索引分开成N个一维矩阵表示
			sort
				从小到大排序
				可控制axis,默认是axis=1(行)
			转置
				方法1
					A.T
				方法2
					np.transpose(A)
			clip(Array, Array_min, Array_max)
				将超出边界的值调整为指定的边界值,未超出的值继续保持原值
		索引
			表示方式
				A[I][j]
				A[i, j]
			切片操作
				start:end
					A[2,3:5]
						行索引为2,列索引为区间[3,5)
					A[:,:5]
						前5列的所有数据
					A[:5]
						前五行的所有数据
					开始索引:结束索引
						空值代表边界值
				::n
					A[::3]
						跳步,每3个数取第一个数
			A.flatten()
				展开为1维矩阵
			A.flat
				是一个迭代器
					for a in A.flat
						遍历元素
		合并
			np.vstack(A,B)
				纵向合并
					[[A],[B]]
			np.hstack(A,B)
				横向合并
					[A,B]
			np.concatenate((A,B,B,A),axis=1)
				多个矩阵纵向合并
			np.concatenate((A,B,B,A),axis=0)
				多个矩阵横向合并
		一维矩阵(n个元素)的转置
			先转成二维
				shape=(1,n)
					A[np.newaxis,:]
					A.reshape(1,A.size)
				shape=(n,1)
					A[:,np.newaxis]
					A.reshape(A.size,1)
			再进行转置
				newA.T
		分割
			等量分割
				纵向分割
					np.split(A,2,axis=1)
					np.vsplit(A,2)
				横向分割
					np.split(A,2,axis=0)
					np.hsplit(A,2)
				每个分块必须等量,否则报错
			不等量分割
				纵向分割
					np.array_split(A,2,axis=1)
				横向分割
					np.array_split(A,2,axis=0)
				分块可不等量
		赋值
			浅拷贝
				B=A
					B和A是同一个对象,变化同步
			深拷贝
				B=A.copy()
					B和A是不同对象,变化不同步
	Pandas
		主要两个数据结构
			Series
				pd.Series(indexA,valueA)
					左边索引,右边值
				pd.Series(valueA)
					不配置索引,则索引从0开始++
			DataFrame
				每个列的类型可不同
				df = Pandas.DataFrame(value, 行索引标签, 列索引标签)
					value
						二维数组或矩阵
					行索引标签
						行索引,类似数据库表的行号
					列索引标签
						列索引,即表头,类似数据库表的字段名
				df = Pandas.DataFrame(value)
					自动生成索引
				df[‘列标签’]
					按列索引取出一列
				df.index
				df.columns
				df.value
				df.describe()
					数据情况
				df.sort_index(axis=1, ascending=False)
					对索引排序,升序
					ascending=True为降序
				df.sort_values(by=‘列标签’)
					对某列值排序
		常用方法
			pd.date_range('20160101',periods=6)
				生成6个日期
			选择数据
				df[位置:位置]
					[s,e)
				df[‘标签’:‘标签’]
					[s,e]
				df[‘列标签’] = df.column
					选择某列
				df.loc(‘行标签’,‘列标签’)
					根据标签,选择某行,某列
						可配合 : 使用
				df.iloc(行位置,列位置)
					根据位置,选择某行,某列
						可配合 : 使用
				df.ix(行位置,‘列标签’)
					混合标签和位置,选择某行,某列
						可配合 : 使用
				df[df.‘列标签’<8]
					使用判断进行筛选
			修改数据
				选择数据=新赋值
			新增数据
				df[‘newColumn’]=pd.Series(......)
					为DataFrame添加一列新Series
					长度需要对齐
			删除NaN的数据
				df.dropna(axis=0,how=‘any’)
					将有NaN值的行删除
				df.dropna(axis=1,how=‘all’)
					将整列全是NaN的列删除
			替换NaN的数据
				df.fillna(value=0)
					将NaN替换成0
			判断是否是NaN
				df.isnull()
					对每个元素分别进行判断
				pd.any(df.isnull)
					含有NaN就是True
		读取文档
			data = pd.read_csv(‘filepath’)
				读取csv
				支持的格式
					csv
					Excel
					json
					html
					pickle
					......
			data. to_pickle(‘data.pickle’)
				转成pickle持久化数据存在磁盘
		合并
			np.concat([df1, df2, df3], axis=1, ignore_index=True, join=‘inner’)
				默认axis=0
					纵向
				默认ignore_index=False
					索引会重复
				默认join=‘outer’
					外连接,不抛弃对不上号的部分
					内连接则会抛弃
				join_axes = [df1.index]
					依据df1的index进行合并
					df1没有的部分将被抛弃
			df1.append([df2, df3])
				只有纵向合并
			np.merge(left, right, on=[‘key1’, ’key2’], how=‘left’)
				类似数据库的leftTable left join rightTable on leftTable.key1=rightTable.key1 and ...
				how
					inner
						默认
					outer
					left
					right
				indicator=True
					会把合并情况放在最后一列
				indicator=‘命名’
					会把合并情况放在最后一列,并给出列名
				suffixes=['_boy', '_girl']
					为标签添加后缀
					区分数据所属,防止标签重叠
			pd.merge(left, right, left_index=True, right_index=True, how='outer')
				根据索引号合并
	画图
		import matplotlib.pyplot as plt
		plt.plot([xx],[yy])
			设置方式1
		data = pd.Series()
			data.plot()
				设置方式2
		data = pd.DataFrame
		plt.show()
			渲染
		图类型
			plot.scatter
			plot.bar
			plot.box
			plot.hist
			plot.area
			plot.kde
			plot.hexbin
		配置
			ax = data.plot.scatter(x='A',y='B',color='DarkBlue',label='Class1')
			data.plot.scatter(x='A',y='C',color='LightGreen',label='Class2',ax=ax)
				ax=ax
					将此图画在ax同一张画布上
	计算速度优化
		矩阵存储方式选择
			order=‘C’
				C-type以行为主在内存中排列
			order=‘F’
				Fortran以列为主在内存中排列
			根据使用的级别是行是列,进行选择
		view比copy快
			能不copy就不copy
			ravel是flatten的view方式,快很多
			一个个选是copy
			:是view
			::也是view
			加法性能对比
				a = a + 1
					最慢
						是copy,并且要转到下一步np.add再进行运算
				np.add(a, 1)
					稍快
						是copy
				a += 1
					更快
						是view
				np.add(a, 1, out=a)
					最快
						是view
		numpy比pandas速度快
			pandas是基于numpy的扩展
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值