您的位置:首页 >聚焦 >

当前视讯!Pandas实战小技巧,很多列的Explode多行!

2022-07-28 05:37:05    来源:程序员客栈


(资料图)

今天在蚂蚁老师的交流学习群中看到有一个同学问的一个关于excel自动化处理的问题,最近刚学完蚂蚁老师的Python实现Excel办公自动化系列课程,正好牛刀小试一下。

需求

有一个表格需要转置成另外一个形式的表,如图:

其实可以理解批量对多个产品进行分类汇总

思路

1、按产品拆成多个DataFrame2、批量合并多个DataFrame3、按订单号分组,数量排序4、写到excel中难点是如何按产品拆成多个DataFrame,我的思路是这样的,使用pandas读取文件,"订单号"作为索引列,获取到DataFrame的字段信息,这些字段涵盖了每个产品的信息,然写个方法将一个列表按指定数目分成多个列表的,每一个小列表就是每个产品的字段信息,那么就可以活获取到对应的数据了。解决了这个问题剩余的就比较简单了。就是合并数据,处理数据,写excel。

代码实现

#--coding:utf-8--#@Time:2022/7/2721:54#@Author:小牛刀#@File:批量对多个产品进行分类汇总.py#@Software:PyCharmimportpandasaspdimportxlwingsasxw#app=xw.App(visible=False,add_book=False)#wb=app.books.open("df.xlsx")#sheet=wb.sheets[0]#df=sheet.range("A1").options(pd.DataFrame,expand="table").value#columns_list=list(df.columns)df=pd.read_excel("df.xlsx",index_col="订单号")columns_list=list(df.columns)print(columns_list)##把一个列表按指定数目分成多个列表的deflist_of_groups(init_list,children_list_len):list_of_groups=zip(*(iter(init_list),)*children_list_len)end_list=[list(i)foriinlist_of_groups]count=len(init_list)%children_list_lenend_list.append(init_list[-count:])ifcount!=0elseend_listreturnend_list#将产品分割成指定字段columns_list=list_of_groups(columns_list,5)df_list=[]forcolincolumns_list:df1=df[col]#将字段替换为指定字段df1.columns=["产品","名称","重量","数量","备注"]#print(df1)df_list.append(df1)df_all=pd.concat(df_list)#删除空行df_all.dropna(inplace=True)#重置索引df_all.reset_index(inplace=True)#按订单号分组,数量排序new_df=df_all.groupby("订单号").apply(lambdax:x.sort_values(by="数量",ascending=False))print(new_df)new_df.to_excel("result.xlsx",index=False)#wb.save()#wb.close()#app.quit()

总结

这个案例用到的数据技术主要是pandas处理excel,就是蚂蚁老师在课程里讲过的知识。通过这个案例发现老师的课程真的太实用了,并且温故了知识又解决了同学的问题。

写在最后

这里强烈推荐一下蚂蚁的python课程,全都面向实战,不注水,全干货。就这案例目而言,pandas,课程里都有讲过的,学完做像这样的案例就很easy。

今晚来蚂蚁老师抖音直播间,Python带副业全套餐有优惠!!!

关键词: 字段信息 这个案例 写在最后

相关阅读