第一次在知乎写长文的python办公类文章,有点小紧张~~
自己是在给女朋友做东西的时候想到,可以分享一些python编程的简单知识,帮助大家提高工作的效率。然后就有了写文章出来的冲动~还开了一个公众号~~
如果大家有什么想法,欢迎大家交流分享。如果有建议的话,也欢迎大家提出来,我一定会吸取意见,嘿嘿~
问题:
玩具制造厂总厂有一张excel表,记录了每种零件的进厂时间及代号,你所在的分厂的excel表只记录了每种玩具对应的零件的代号。
现在你的上司想要你根据总厂的excel表,补充分厂零件的进厂时间。
总厂和分厂的数据如下所示:
问题分析:
可以发现,分厂的零件代号在总厂中并不是唯一的,对一种零件来说,它的进厂时间可能存在多个。
这个例子并不难,大家都知道怎么做,但是没有人会喜欢做,毕竟这种繁琐的工作最让人烦躁。
问题解决:
在写程序之前,先导入pandas和numpy库。pandas库用来读取和保存excel文件,numpy库用来处理数据。
import pandas as pd
import numpy as np
import是用来进行库的导入,pd和np分别是这两个库的简称。
1、 将excel表格中的数据读取到python中
data1 = pd.read_excel('E:/untitled/excel/test.xlsx', sheet_name=0)
data2 = pd.read_excel('E:/untitled/excel/test.xlsx', sheet_name=1)
注:data1中读取的是总厂的数据,data2是分厂。
这两行代码的作用是从excel中读取数据,括号中有两个参数。
第一个参数就是excel的文件名(全路径名)。按住shift+鼠标右击文件,在弹出的菜单中选择“复制为路径”,要记得把反斜杠改为斜杠。
第二个参数sheet_name指在excel文件中需要读取的sheet区域名字。
sheet_name后面既可以接excel中sheet的名字,也可以接sheet的序号,例如:sheet_name="your_sheet_name",或者sheet_name=0。
划重点,在python中,计数是从0开始的,也就是说,0代表excel中第一个sheet表,1代表第二个sheet表,依次类推。
运行结果如下所示:
图中展示的数据正是使用pandas库得到的数据,它的类型是DataFrame,类似于excel表格。NaN是python对空字符的表示方法,表示这里没有数据。
2、 写程序来制定处理规则,让数据按照程序流动,得到想要的结果。
data1 = np.array(data1, dtype=str)
data2 = np.array(data2, dtype=str)
注:这两行代码是将数据格式由DataFrame转化为numpy库中的array数组,方便对它做进一步的操作。Pandas库适合对数据进行查询、筛选,numpy库则适合对数据进行处理。
运行结果如下所示:
观察转化后的数据发现,数据都被单引号引起来,形式变成了字符串,这是因为字符串方便进行查询。Data2的数据在被转化为字符串数组后,多了“.0”,需要在后面的操作中去掉。
length1 = data1.shape[0]
length2 = len(data2)
注:这两行代码用来得到两个数组的行数。两行代码采用了两种不同的方式,都可以得到数组的行数,大家可以自由选择其中一种。
第一种是数据的shape方法,shape[0]会返回数组的行数,shape[1]会返回数组的列数。
第二种的len()方法是python的一个通用的自带方法,可以求出数组的长度。运行结果如下所示:
for i in range(length2):
for j in range(length1):
if data2[i, 0].strip(".0") in data1[j,1]:
data2[i, 1] = data2[i, 1] + " " + data1[j, 0]
注:构建两个for循环对两个数组进行遍历,若检索到分厂的零件代号在总厂的零件代号中,那么将相应的进厂时间放在分厂对应的进厂时间中。
strip函数是用来在字符串的首尾去掉一些不需要的字符,像空格。
将分厂的数据转成字符串后,分厂数据比原始数据多了“.0”,字符串中的“1001”和“1001.0”是不一样的,这会影响与总厂数据的匹配,因此使用strip函数去掉分厂数据中的“.0”。
in是判断分厂的零件代号是否在总厂零件代号中的方法。“\r\n”表示回到行首并换行,用于定义数据的显示格式。
运行完后得到的分厂数据如下:
3、 把得到的处理结果,保存到result.xlsx中
data2 = pd.DataFrame(data2)
data2.to_excel(' E:/excel/result.xlsx')
注:这里的两行代码用来保存数据,括号中填写自己想要保存数据的位置(全路径)。
到此,我们使用jupyter notebook,实现了我们的目标。
最后,把我们写好的程序贴图附在这里。
-----------------------------------------
到这里,我们的第一个excel文件操作任务就告一段落了。我的公众号是 数算天下的红.
如果你想了解更多关于python自动化办公的知识,欢迎关注我的公众号啦~,小数和小红等你一起迈步哦。