第四周 字典/集合及常用的数学库 (用Python玩转数据/南京大学 ) | 您所在的位置:网站首页 › 洛阳香榭里畔山兰溪四期 › 第四周 字典/集合及常用的数学库 (用Python玩转数据/南京大学 ) |
字典/集合这种数据结构觉得蛮有用的;数组、矩阵也是,稍微复杂的问题都会用到这些,数学库numpy,pandas的理解还是太浅,内容还是偏学术,不是很实用。接触编程了也一段时间了,笔记里面涉及到的很多小功能都没遇到过,泛而不专。 4.1 为什么需要字典 某公司人事部门让技术部门用python构建一个简易的员工信息表,包含员工的姓名和工资信息。根据信息表查询员工牛云的工资 # Filename:info.py names = ['wangdachui', 'niuyuan', 'linling', 'tianqi'] salaries =[3000, 2000, 4500, 8000] print(salaries[names.index('niuyun')]) #names.index() 得到序号 另一种直观的表示方法 salaries['niuyun'] 字典,一种映射类型;组成:-键(key),-值(value),-key-value 对 创建字典:直接;利用dict函数 alnfo = {'wangdachui': 3000, 'niuyun': 2000, 'linning': 4500, 'tian'} #直接创建,大括号,逗号隔开,键和值用冒号连接,形成映射关系 info = [('wangdachui', 3000}, ('niuyun', 2000), ('linling', 4500), ('tianqi', 8000)] #列表套元组 binfo = dict(info) #dirt函数创建字典,运行后 {'wangdachui': 3000, 'niuyun': 2000, 'linning': 4500, 'tian'} cinfo = dict([['wangdachui', 3000], ['niuyun', 2000], ['linling', 4500], ['tianqi', 8000]]) #dict函数,列表套列表 dinfo = dict(wangdachui = 3000, niuyun = 2000, linling = 4500, tianqi = 8000)#等号元组 d = dict(('wangdachui', 3000),('niuyun', 2000)) #dict函数把元组转为字典 d # {'wangdachui': 3000, 'niuyun': 2000} 创建员工信息表时如何将所有员工的工资默认值设置为3000? aDict = {}.fromkeys(('wangdachui', 'niuyuan', 'linling', 'tianqi'), 3000) #fromkeys()函数,所有的key放一起,元组可改成列表 aDict # {'wangdachui': 3000, 'niuyun': 2000, 'linning': 4500, 'tian'} sorted(aDict) #返回的是list而不是字典,'wangdachui', 'niuyuan', 'linling', 'tianqi' 已知有姓名列表和工资列表,如何生成字典类型的员工信息表,zip函数将两个列表中的函数对应打包 names = ['wangdachui', 'niuyuan', 'linling', 'tianqi'] salaries =[3000, 2000, 4500, 8000] dict(zip(names, salaries)) #{'wangdachui': 3000, 'niuyun': 2000, 'linning': 4500, 'tian'} 对于几个公司的财经数据,如何构造公司代码和股票价格的字典 pList = [('AXP', 'American Express Company', '78.51'), ('BA', 'The Boeing Company', '184.76'), ('CAT', Caterpillar Inc', '33.71'), ('CSCO', Cisco Systems, Inc', '33.71') ('CVX', 'Chevron Coporation', '106.09')] 用循环将列表中的每一个元素中的二级元素,0和2取出来放到一个列表中,zip打包,dict函数生字典 #Filename: createdict.py pList = ~~~ aList = [] bList = [] for i in range(5): aStr = pList[i][0] bStr = pList[i][2] aList.append(aStr) bList.append(bStr) aDict = dict(zip(aList, bList)) print(aDict) #{'AXP':'78.51, 'BA': '184.76', 'CAT':' 96.39', 'CSCO': '33.71', 'CVX': '106.09'} 4.2 字典的使用 字典的基本操作 alnfo = {'wangdachui': 3000, 'niuyun': 2000, 'linning': 4500, 'tian'} ainfo(‘niuyun') #键值查找 ,写上key后查找 2000 ainfo['niuyun'] = 9999 #更新 ainfo['fuyun'] = 1000 #添加 ‘mayun’ in ainfo #判断 false del ainfo['fuyun'] #删除字典成员 字典的内建函数 dict(), len() 计算字典元素的个数, hash()#判断一个对象是不是哈希的,可变的 hash('wangdachui') #7716305958664889313 哈希值 testList = [1, 2, 3] hash(testList) #TypeError: unhashable type:'list' 列表 单独输出员工姓名和工资金额 alnfo = {'wangdachui': 3000, 'niuyun': 2000, 'linning': 4500, 'tian'} ainfo.keys() #输出字典的键值 ainfo.values() #输出字典的值 for k, v in ainfo.items(): #item函数,键和值组成列表返回 print(k, v) 遍历字典的所有键和值 一份原有信息,一份是公司中有工资更改人员和新进人员信息,如何处理可以较快获得完整的信息表 alnfo = {'wangdachui': 3000, 'niuyun': 2000, 'linning': 4500} binfo = {'wangdachui': 4000, 'niuyun': 9999, 'wangzi': 6000} ainfo.update(binfo} #update函数更新 ainfo #{'wangdachui': 4000, 'niuyun': 9999, 'linning': 4500, 'wangzi': 6000} 键查找方法区别 stock = {'AXP':78.51, 'BA':184.76} stock('AAA') #出现异常,程序终止 stock = {'AXP':78.51, 'BA':184.76} print(stock.get('AAA')) #get方法 不存在返回默认值None 删除字典 astock = {'AXP':78.51, 'BA':184.76} bstock = astock astock = {} bstock #仍为原来的值 {'AXP':78.51, 'BA':184.76} astock = {'AXP':78.51, 'BA':184.76} bstock = astock astock.clear() astock #{} 清空原来的对象 bstock #{} 常用字典方法:clear(), copy(), fromkeys(), get(), items(), keys(), pop(), setdefault(), update(), values() 字典相关案例 JSON格式 -JavaScript Object Notation, JS对象标记;-一种轻量级的数据交换格式,如 {‘name’:'niuyun', 'address': {'city':beijing, 'street': 'chaoyang road'} } #字典套字典 x = {‘name’:'niuyun', 'address': {'city':beijing, 'street': 'chaoyang road'} } x['adress']['street'] #'chaoyangroad' 搜索引擎关键词查询,搜索引擎接口 中国:http://cn.bing.com/search?q=%us #?前为搜索部分,us为特征词,?后面类似字典,为关键字 美国:http://www.bing.com/search?q=%us import requests kw = {'q':'python dict'} r = request.get('http://cn.bing.com/search', params =kw) r.url print(r.text) 可变长关键词参数(字典) #元组可充当可变长位置参数 def func(args1, *argst, **argsd) #形参部分用两个*表示 print(args1) print(argst) print(argsd) func('hello', 'wangdachui', 'niuyun', 'linling', a1 = 1, a2 = 2, a3 =3) #result hello {'wangdachui', 'niuyun', 'linling'} {'a1':1, 'a3':3, 'a2':2} 4.3集合 #很多程序设计语言中没有 姓名重复登记,删除重复的 names = ['wangdachui', 'niuyun', 'linling','wangdachui', 'niuyun'] namesSet = set(names) #set函数对列表进行处理 namesSet #{'wangdachui', 'niuyun', 'linling'} 集合,一个无序不重复的元素的组合 -可变集合(set) -不可变集合(frozenset) aset =set('hello') aset #{'o', 'h', 'e', 'l'} bset = frozenset('hello') bset #frozenset(['o', 'h', 'e', 'l]) 交集 &, 并集 |,差/减集 -,补集/只属于某一个集合/对称差分 ^ 集合内建函数 面向所有集合:s.issubset(t) #t是否为s的子集, issuperset(t), union(t), intersection(t), difference(t), symmetric_difference(t), copy() 面向可变集合函数 undate(t) add() remove() discard() pop() clear() 4.4 扩展SciPy #软件生态圈,开源,主要为数学、科学和工程服务 包含NumPy, SciPy, Matplotlib, pandas核心库 SciPy中的数据结构,原有数据结构的变化 -ndarray (N维数组),-Series(变长字典),-DataFrame(数据框) NumPy:强大的ndarray对象和ufunc函数;精巧的函数;比较适合线性代数和随机数处理等科学计算;有效的通用多维数据,可定义任意数据类型;无缝对接数据库 import numpy as np aArray = np.ones((3,4)) #ones 方法,3*4数组,都是1 SciPy核心库 特征:Python中科学计算程序的核心包;有效计算numpy矩阵,让Numpy和SciPy协同工作;致力于科学计算中常见问题的各个工具箱,其不同子模有不同的应用,如插值,积分,优化和图像处理 import numpy as np from scipy import linalg arr = np.array([1,2],[3,4]) linalg.det(arr) #-2 linalg行列式 Matplotlib 特征:基于NumPy;二维绘图库,简单快速地生成曲线图、直方图和散点图等形式的图;常用的pyplot是一个简单提供类似MATLAB接口的模块 panda特征:基于SciPy和NumPy;高效的Series和DateFrame数据结构;强大的可扩展数据操作与分析的Python库;高效处理大数据集的切片等功;提供优化库功能读写多种文件格式如CSV,HDFS df[2:5] #dataframe df.head(4) df.tail(3) 4.5 ndarray 数据结构 Python中的数组 形式:用list和tuple等数据结构表示数组,-一维数组 list=[1,2,3,4] -二维数组 list = [[1,2,3],[4,5,6],[7,8,9]] array模块 -通过array函数创建数组,array.array('B', range(5)); #array函数 -提供append、insert和read等方法 ndarray是什么? N维数组 -NumPy 中基本的数据结构 -别名为array; -利于节省内存和提高CPU计算时间;-有丰富的函数 ndarray 数组属性 -维度(dimensions)称为轴(axies),轴的个数称为轶(rank) -基本属性 ndarray.ndim(轶);ndarray.shape(维度);ndarray.size(元素总个数);nadarray。dtype(元素类型);ndarray.itemsize(元素字节大小) import numpy as no aArray = np.array([1,2,3]) aArray #array([1,2,3]) bArray = np.array([(1,2,3),(4,5,6)]) bArray #result array([1,2,3] [4,5,6]), np.arrange(1,5,0.5) #arrange处理浮点数 #result array([1., 1.5, 2., 2.5, 3., 3.5., 4., 4.5]) np.random.random((2,2)) #result array([[0.797,0.146], [0.958, 0.861]]) np.linspace(1,2,10, endpoint =False) #确定等差数组 #result array([1., 1.1, 1.2, 1.3,1.4,1.5,1.6,1.7,1.8,1.9]) np.ones([2,3]) #创建值全为1的2*3基础数组 np.zeros([2,2]) #创建值全为0的2*2基础数组 np.fromfunction(lambda i,j:(i+1)*(j+1),(9,9)) #从某一个函数创建一个维度的数组(9*9乘法口诀表) 其他创建函数:arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, one_like, r, zeros, zeros_like ndarray的操作 aArray = np.array([(1,2,3),(4,5,6)]) #result array([1,2,3] [4,5,6]), print(aArray[1]) #[4 5 6] 第一行 print(aArray[0:2]) 第0行和第1行 #result [[1 2 3] [4 5 6]] print(aArray([:,[0,1]])) #第0列和第1列 [[1 2] [4 5]] print(aArray[1, [0,1]])# 第1行,第0和第1列 [4 5] for row in aArray: print(row) [1 2 3] [4 5 6] 4.6 变长字典series |
CopyRight 2018-2019 实验室设备网 版权所有 |