Hi~大家好!
我们经常会在工作中遇见,类似下图中的表格(原始表格共计5136
条数据),上级要求你将品名
列的商品筛选出来,并按照“品名
.xlsx
”的格式单独保存为一个exce工作簿,或者以品名
为名保存为多个工作表,这样数据少了还好说,如果数据量大了,那还不得累得半死!
业务需求:
- 把
品名
列的商品取出来,相同
的存储在同一个工作表或者工作簿中。
代码实现
导入模块和文件:
代码语言:javascript复制import pandas as pd
df = pd.read_csv('价格.csv')
本文关键步骤是通过两个方法
实现的,两个方法会分别实现如何取值
、保存为工作表
以及工作簿
;而关键步骤代码量最多不会超过三行
,最少的只有两行
;两个方法
其实差不多,差别只函数在于两个函数。
unique函数
第一种方法是利用unique
函数。unique
函数是以数组形式返回列的所有唯一值,也就是相同的两个值只返回一个。
保存为工作表:
代码语言:javascript复制with pd.ExcelWriter('价格总表.xlsx') as writer:
for i in df['品名'].unique():
# 用unique()取出的唯一值创建工作表,当品名与唯一值相同时,保存在相应的工作表
df[df['品名'] == i].to_excel(excel_writer=writer, sheet_name=i, index=False)
同理,保存为工作簿:
代码语言:javascript复制for i in df['发布日期'].unique():
df[df['发布日期'] == i].to_excel(f'./商品每日价格详表/{i}.xlsx', sheet_name=i, index=False)
groupby函数
第二种方法是利用groupby()
函数。groupby()
函数主要的作用是进行数据的分组以及分组后进行运算,本文只要用到groupby()
函数的分组功能。
# 保存为工作表:
with pd.ExcelWriter('价格总表1.xlsx') as writer:
# i为品名唯一值,e为数据分组
for i, e in df.groupby('品名'):
e.to_excel(excel_writer=writer, sheet_name=i, index=False)
# 保存为工作簿:
for i, e in df.groupby('品名'):
e.to_excel(f'./商品每日价格详表/{i}.xlsx', sheet_name=i, index=False)
下图i
为红色方框内的品名,e
是以唯一的品名进行分好的组:
运行程序后,保存的工作表:
保存好的工作表,一共416
个工作簿:
我们可以看到,只需要四、五行代码
即可拆分416
个工作表和工作簿,而关键代码也就两三行
;如果是手动的进行拆分,那还不知道拆到何年何月,所以python是真的能为你省下很多时间!