网站建设汇报评估,宁夏网络推广公司,分销商城,公司视频宣传片自从学了Python后就逼迫用Python来处理Excel#xff0c;所有操作用Python实现。目的是巩固Python#xff0c;与增强数据处理能力。 这也是我写这篇文章的初衷。废话不说了#xff0c;直接进入正题。
数据是网上找到的销售数据#xff0c;长这样#xff1a; 一、关联公式:…自从学了Python后就逼迫用Python来处理Excel所有操作用Python实现。目的是巩固Python与增强数据处理能力。 这也是我写这篇文章的初衷。废话不说了直接进入正题。
数据是网上找到的销售数据长这样 一、关联公式:Vlookup
vlookup是excel几乎最常用的公式一般用于两个表的关联查询等。所以我先把这张表分为两个表。
df1sale[[订单明细号,单据日期,地区名称, 业务员名称,客户分类, 存货编码, 客户名称, 业务员编码, 存货名称, 订单号,客户编码, 部门名称, 部门编码]]
df2sale[[订单明细号,存货分类, 税费, 不含税金额, 订单金额, 利润, 单价,数量]]需求想知道df1的每一个订单对应的利润是多少。
利润一列存在于df2的表格中所以想知道df1的每一个订单对应的利润是多少。用excel的话首先确认订单明细号是唯一值然后在df1新增一列写vlookup(a2,df2!a:h,6,0) 然后往下拉就ok了。剩下13个我就不写excel啦
那用python是如何实现的呢
#查看订单明细号是否重复结果是没。
df1[订单明细号].duplicated().value_counts()
df2[订单明细号].duplicated().value_counts()df_cpd.merge(df1,df2,on订单明细号,howleft)兄弟们学习python有时候不知道怎么学从哪里开始学。掌握了基本的一些语法或者做了两个案例后不知道下一步怎么走不知道如何去学习更加高深的知识。 那么对于这些大兄弟们我准备了大量的免费视频教程PDF电子书籍以及源代码 还会有大佬解答 文末名片扫码自取哈 二、数据透视表
需求想知道每个地区的业务员分别赚取的利润总和与利润平均数。
pd.pivot_table(sale,index地区名称,columns业务员名称,values利润,aggfunc[np.sum,np.mean])三、对比两列差异
因为这表每列数据维度都不一样比较起来没啥意义所以我先做了个订单明细号的差异再进行比较。
需求比较订单明细号与订单明细号2的差异并显示出来。
sale[订单明细号2]sale[订单明细号]#在订单明细号2里前10个都1.
sale[订单明细号2][1:10]sale[订单明细号2][1:10]1#差异输出
resultsale.loc[sale[订单明细号].isin(sale[订单明细号2])False]四、去除重复值
需求去除业务员编码的重复值
sale.drop_duplicates(业务员编码,inplaceTrue)五、缺失值处理
先查看销售数据哪几列有缺失值。
#列的行数小于index的行数的说明有缺失值这里客户名称329335,说明有缺失值
sale.info()需求用0填充缺失值或则删除有客户编码缺失值的行。 实际上缺失值处理的办法是很复杂的这里只介绍简单的处理方法若是数值变量最常用平均数或中位数或众数处理比较复杂的可以用随机森林模型根据其他维度去预测结果填充。若是分类变量根据业务逻辑去填充准确性比较高。
比如这里的需求填充客户名称缺失值 就可以根据存货分类出现频率最大的存货所对应的客户名称去填充。
这里我们用简单的处理办法用0填充缺失值或则删除有客户编码缺失值的行。
#用0填充缺失值
sale[客户名称]sale[客户名称].fillna(0)
#删除有客户编码缺失值的行
sale.dropna(subset[客户编码])六、多条件筛选
需求想知道业务员张爱在北京区域卖的商品订单金额大于6000的信息。
sale.loc[(sale[地区名称]北京)(sale[业务员名称]张爱)(sale[订单金额]5000)]七、 模糊筛选数据
需求:筛选存货名称含有三星或则含有索尼的信息。
sale.loc[sale[存货名称].str.contains(三星|索尼)]八、分类汇总
需求:北京区域各业务员的利润总额。
sale.groupby([地区名称,业务员名称])[利润].sum()九、条件计算
需求存货名称含“三星字眼”并且税费高于1000的订单有几个这些订单的利润总和和平均利润是多少或者最小值最大值四分位数标注差
sale.loc[sale[存货名称].str.contains(三星)(sale[税费]1000)][[订单明细号,利润]].describe()十、删除数据间的空格
需求删除存货名称两边的空格。
sale[存货名称].map(lambda s :s.strip())十一、数据分列 需求将日期与时间分列。
salepd.merge(sale,pd.DataFrame(sale[单据日期].str.split( ,expandTrue)),howinner,left_indexTrue,right_indexTrue)十二、异常值替换
首先用describe()函数简单查看一下数据有无异常值。
#可看到销项税有负数一般不会有这种情况视它为异常值。
sale.describe()需求用0代替异常值。
sale[订单金额]sale[订单金额].replace(min(sale[订单金额]),0)十三、分组
需求根据利润数据分布把地区分组为“较差”,“中等”,“较好”,“非常好”
首先当然是查看利润的数据分布呀这里我们采用四分位数去判断。
sale.groupby(地区名称)[利润].sum().describe()根据四分位数把地区总利润为[-9,7091]区间的分组为“较差”(7091,10952]区间的分组为中等 (10952,17656]分组为较好(17656,37556]分组为非常好。
#先建立一个Dataframe
sale_areapd.DataFrame(sale.groupby(地区名称)[利润].sum()).reset_index()#设置bins,和分组名称
bins[-10,7091,10952,17656,37556]
groups[较差,中等,较好,非常好]#使用cut分组
#sale_area[分组]pd.cut(sale_area[利润],bins,labelsgroups)十四、根据业务逻辑定义标签
需求销售利润率即利润/订单金额大于30%的商品信息并标记它为优质商品小于5%为一般商品。
sale.loc[(sale[利润]/sale[订单金额])0.3,label]优质商品
sale.loc[(sale[利润]/sale[订单金额])0.05,label]一般商品其实excel常用的操作还有很多我就列举了14个自己比较常用的若还想实现哪些操作可以评论一起交流讨论另外我自身也知道我写python不够精简惯性使用loc。其实query会比较精简。若大家对这几个操作有更好的写法请务必评论告知我感谢
最后想说说我觉得最好不要拿excel和python做对比去研究哪个好用其实都是工具excel作为最为广泛的数据处理工具垄断这么多年必定在数据处理方便也是相当优秀的有些操作确实python会比较简单但也有不少excel操作起来比python简单的。
比如一个很简单的操作对各列求和并在最下一行显示出来excel就是对一列总一个sum()函数然后往左一拉就解决而python则要定义一个函数因为python要判断格式若非数值型数据直接报错。
总结一下就是无论用哪个工具能解决问题就是好数据分析师