今天和明天分两次讲一下:
在数据分析中查“字典”的方法
先回顾一下:
上篇我们讲了如何用excel表中的基础数据制作一个python中的字典。
运用到了pandas的三个方法,to_dict, set_index和T。
我们今天先讲用批量查字典的一种方法,顺便体会一下python中的编程。
每天提及的知识点,一般不超过3个,一方面是我不想给自己太大压力,因为没想过要把它做成多大的一个东西,另一方面,也是考虑到office工作者平时工作就挺忙的,也没功夫看我的长篇大论。只希望通过我每天一小步,能够让大家在工作之余,能了解另一种数据分析工具的相关知识点,如果还能在大家的实际工作中也有帮助的话,那就超出我的预期了。
开篇的文章中,我提了一个问题:
编程只是计算机软件工程师能做的事么?
我的答案是否。
我们今天就要坐上python这辆跑车,系好安全带了么?
1、需要用到的模块
pandas
先引入这个武器:
import pandas as pd
2、准备工作:
我们还是用"test004.xlsx"这个表格的数据举例, 它有两个sheet页,分别是"费用"和"部门"。
今天要综合运用之前篇章中学过的知识点,所以如果还没掌握的同学们,可以先回去翻一翻:
3、把数据读取到计算机内存:
db = pd.read_excel("d:\\data\\test004.xlsx",sheet_name="部门")
df = pd.read_excel("d:\\data\\test004.xlsx",sheet_name="费用")
4、我们今天的任务是:用“部门”表数据生成字典,并在“费用”数据中根据工号查字典,生成两个新的数据列:“部门”和“性别”,以按部门和性别分别统计一下两月费用报销金额,我这里只是举例,实际工作中应该很少有按性别统计费用数据的。
1)生成字典:
dict = db.set_index("employee ID").T.to_dict()
2)编个查字典小程序,它接受你要查询的字典,要查询内容的名称(比如“部门”)和工号,然后告诉你查询的结果值,如果在查字典时有任何错误发生,则打印错误信息,并返回一个“空值”——"None":
def search_dict(dic,search_inx, search_cont):
try:
result = dic[search_inx][search_cont]
return result
except Exception as err:
print(err)
return None
以上一段程序,功能非常简单,但它麻雀虽小,五脏俱全。
下面我们一条条解释:
def search_dict(dic,search_inx, search_cont):
这是用来定义一个函数,它里面可以含有最少一条python语句,多则不限,通过它包含的那些语句,来完成一系统运算或操作,实现我们想要的功能。
它最少一条语句,就是"return", 否则不完整。
try:
.
.
.
except Exception as err:
try 和 except 是一个结构,用于出错处理。
人做事没有不犯错的,写程序也会犯各种各样的错误,有时犯个错,程序可能就崩溃了,但我们至少可以先想到万一犯错后,该怎么办?
通常,我们把正常情况下该要执行的动作放在try: 之后,而把出错后需要执行的动作放在except之后, 出错时python一般给你一些提示信息,会放在Exception这个内部变量中,标准的写法要把它赋值给一个我们自己定义的变量,这里使用的是err.
result = dic[search_inx][search_cont]
return result
这两条语句,第一条用来查字典,并把查到的结果放在"result"变量中。
第二条用来返回程序的结果,如果第一条没有错误,则执行到这儿,这段程序就完成了。否则,会“跳到” except 部分,去执行以下的语句:
print(err)
return None
这两条语句,第一条用于打印错误提示信息
第二条用来返回一个“空值”——None
好,我们的程序写完了,下面来试验一下它的运行效果,同学们是不是有点小激动呢 :-)
先看一下正常运行的情况,我们查字典,并把结果放在变量bm中存放起来:
bm = search_dict(dict,"E10001","部门")
bm
运行效果如下:
再看一下出错的情况,我们用一个不存在的工号测试:
Python打印出了"E100",报告你出错,你可能需要去检查一下这个输入是否正确,然后我们看到bm没有任何值输出,因为它现在是个空值。
今天就先总结到这儿,不知大家看了我今天的学习笔记,有没有一点点收获呢?