由于工作的关系,平常的工作内容接触数据比较多,处理起来也比较繁琐,尤其是清理数据,重复性比较高。面对着大量的数据关系,理清它确实是需要花费点时间。
恰好最近管理层对数据关注度提升了,需要我们每周提供一份报表,报表自动化我一直都想在做的,但是代码一直在摸索中,所以突破不了。本篇也是对报表自动化的前半部分做个详细的讲解,包括数据读取、拆解、透视等。
来,先看我们其中一份数据是这样子的
我需要从这个数据里知道它的类别和总计数据,之后,我会添加数据的趋势
首先,我们先把需要用到的库导进去,如果没有,可以选安装,也非常简单:pip install XX
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
把库导进去后,找到准备好的数据文件路径,就可以开始把它读出来了。读取数据用了pandas里的内置函数pd.read_excel(),接下来我们用一下刚才那个文件。
chanpin = pd.read_excel(r"E:\深圳大区\报表源数据\产品类.xlsx",usecols=[2,3,4,7,8,9,10,11])
后面的usecols是用来选你需要的列的数据,选中了哪一列,就是读取了哪一列的数据,比如,第6列不重要,那我就不要放在上面了。
用几个方式查看读取的数据,
chanpin.shape #这个函数主要是了解数据的多少列和行
输出:
(2002, 7)
查一下各行列名字段的总计数据
chanpin.info()#这个主要是了解读取的数据的基本情况,包括一些列头、数据类型及行数据等
输出:
RangeIndex: 2002 entries, 0 to 2001
Data columns (total 6 columns):
3级部门 2002 non-null object
4级部门 2002 non-null object
5级部门 2002 non-null object
产品C 2002 non-null int64
产品D 2002 non-null int64
产品E 2002 non-null int64
dtypes: int64(3), object(3)
memory usage: 93.9+ KB
最后,再看一下具体的前面几行的数据
chanpin.head()这个就可以读取具体的数据了
把数据读取出来后,查看数据基本上是用了上面的3个函数;
我们来把表拆开,chanpin1和chanpin2
chanpin1=chanpin[["3级部门","产品B","产品E"]]
chanpin1.head()
输出
3级部门产品B产品E0西丽区2.001西丽区0.002西丽区2.003西丽区2.034西丽区2.00
chanpin2=chanpin[["3级部门","产品C","产品D"]]
chanpin2.head()
输出:
3级部门产品C产品D0西丽区001西丽区002西丽区203西丽区204西丽区00
这样就赋予了两个新表;
接下来,给chanpin2插入一列数据,就是把产品C和产品D加起来,新建了一列数据;
chanpin2.insert(1,"CD的和",chanpin2["产品C"]+chanpin2["产品D"])
chanpin2.head()
这里用的了一个函数insert。
应用方法就是,你想插在那里,就在第一个值那里填序号就可以了,第二个值是你新建的列的命名,第三个值是一个公式,在这里的比较简单,就是产品C和产品D的和;
最后看输出:
3级部门CD的和产品C产品D0西丽区0001西丽区0002西丽区2203西丽区2204西丽区000
最后对原本做一个透视,在平常的表格处理的过程中运用到最多的就是透视表:
chanpin3 = chanpin[["3级部门","产品E","日期"]]
pd.pivot_table(chanpin3,values="产品E",columns="日期",index="3级部门",aggfunc="sum")
输出结果:
日期32周3级部门
会展湾区84前海湾区189前海自贸区56华侨城区80大营销部0宝城区62西丽区13
有了这一列数据,我们就可以做图表了。下篇,我们继续。