python 对excel操作用法详解,用Python完成Excel的常用操作-简书

  python 对excel操作用法详解,用Python完成Excel的常用操作-简书

  自从学了Python,我就强迫自己不用Excel,所有操作都用Python实现。目的是巩固Python,增强数据处理能力。本文总结了14种用Python实现的常用Excel操作,有需要可以参考一下。

  00-1010前言一、关联公式:Vlookup二、数据透视表三、两列差异比较四、重复值剔除五、缺失值处理六、多条件筛选七、数据模糊筛选八、分类汇总九、条件计算十、数据XI间空格剔除、数据分类十二、异常值替换十三、分组十四、根据业务逻辑定义标签。

  

目录

  自从学了Python,我就强迫自己不用Excel,所有操作都用Python实现。目的是巩固Python,增强数据处理能力。

  这也是我写这篇文章的初衷。废话少说,言归正传。

  是在数据网上找到的销售数据。看起来是这样的:

  

前言

  Vlookup几乎是excel中最常用的公式,一般用于两个表的联查等。所以我先把这张桌子分成两张桌子。

  1=销售[[订单明细编号,单据日期,地区名称,业务员名称,客户分类,存货代码,客户名称,业务员代码,存货名称,订单号,

  客户代码,部门名称,部门代码]]

  2=销售[[订单明细编号,存货分类,税,无税金额,订单金额,利润,单价,数量]]

  需求:想知道df1的每一单利润是多少?

  df2的表中存在利润列,所以想知道df1的每笔订单的利润是多少。如果使用excel,首先确认订单明细号是唯一值,然后在df1中增加一个新列写:=vlookup(a2,df2!A:h,6,0),然后拉下来就可以了。(剩下的13个我就不写excel了)

  那么在python中是如何实现的呢?

  #检查订单明细号是否重复,结果为否

  1 [订单详细编号]。已复制()。value _ counties()

  2 [订单详细编号]。已复制()。value _ counties()

  Df_c=pd.merge(df1,df2,on=订单详细编号,how=左)

  

一、关联公式:Vlookup

  需求:想知道每个地区的业务员分别赚取的利润总和与利润平均数。

  Pd.pivot_table(sale,index= regional name ,columns= salesman name ,values= profit ,aggfunc=[np.sum,np.mean])

  

二、数据透视表

  因为这个表中每一列的数据维度都不一样,比较没有意义,所以我先做了一个订单明细号的区别,然后再比较。

  需求:比较订单明细号和订单明细号2的区别并显示。

  销售[订单详细编号2 ]=销售[订单详细编号]

  #在订单明细编号2中,前10个都是1。

  销售[订单明细编号2 ][1:10]=销售[订单明细编号2][1:10] 1

  #差分输出

  Result=sale.loc[sale[订单详细编号]。isin(sale[订单明细编号2])==False]

  

三、对比两列差异

  需求:去除业务员编码的重复值

  Sale.drop_duplicates(销售人员代码,inplace=True)

  

四、去除重复值

  首先检查哪些销售数据列有缺失值。

  #对小于索引的列中的行数的描述缺少值。这里,客户名称是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(""))

  

  

十一、数据分列

  

  需求:将日期与时间分列。

  

sale=pd.merge(sale,pd.DataFrame(sale["单据日期"].str.split(" ",expand=True)),how="inner",left_index=True,right_index=True)

  

  

  

十二、异常值替换

  首先用describe()函数简单查看一下数据有无异常值。

  

#可看到销项税有负数,一般不会有这种情况,视它为异常值。

  sale.describe()

  

  

  需求:用0代替异常值。

  

sale["订单金额"]=sale["订单金额"].replace(min(sale["订单金额"]),0)

  

  

十三、分组

  需求:根据利润数据分布把地区分组为:"较差","中等","较好","非常好"

  首先,当然是查看利润的数据分布呀,这里我们采用四分位数去判断。

  

sale.groupby("地区名称")["利润"].sum().describe()

  

  

  根据四分位数把地区总利润为[-9,7091]区间的分组为较差,(7091,10952]区间的分组为"中等" (10952,17656]分组为较好,(17656,37556]分组为非常好。

  

#先建立一个Dataframe

  sale_area=pd.DataFrame(sale.groupby("地区名称")["利润"].sum()).reset_index()

  #设置bins,和分组名称

  bins=[-10,7091,10952,17656,37556]

  groups=["较差","中等","较好","非常好"]

  #使用cut分组

  #sale_area["分组"]=pd.cut(sale_area["利润"],bins,labels=groups)

  

  

十四、根据业务逻辑定义标签

  需求:销售利润率(即利润/订单金额)大于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要判断格式,若非数值型数据直接报错。)

  以上就是14个用Python实现的Excel常用操作总结的详细内容,更多关于Python Excel操作的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: