第四周 字典/集合及常用的数学库 (用Python玩转数据/南京大学 ) 您所在的位置:网站首页 洛阳香榭里畔山兰溪四期 第四周 字典/集合及常用的数学库 (用Python玩转数据/南京大学 )

第四周 字典/集合及常用的数学库 (用Python玩转数据/南京大学 )

2023-03-23 02:07| 来源: 网络整理| 查看: 265

字典/集合这种数据结构觉得蛮有用的;数组、矩阵也是,稍微复杂的问题都会用到这些,数学库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 实验室设备网 版权所有