只需1秒,用python开发Excel报表也太快了!

公众号: 数据小斑马,关注即可获得价值1000元的数据分析学习资料

数据分析学习目录:

一、Excel系列——四大常用函数及十大高级图表
二、SQL系列——性能优化/多表关联/窗口分析函数等
三、统计学系列——概率论/置信区间/相关/抽样等
四、Pandas系列——数据读取/清洗/规整/分析实战等
五、Python做图系列——箱型图/散点图/回归图/热力图等
六、业务积累系列——流水预测/精细化运营/排序算法等
七、Kmeans系列——原理/评价指标/RFM实战等
八、决策树系列——算法原理/调参/python实现/项目实战
九、贝叶斯系列——算法原理/3种模型/文本分类实战
十、神经网络系列——BP算法原理/最小二乘法/项目实战


数据报表开发是数据分析师一项非常重要的工作内容,不管是大公司的数据中台,还是小型公司的报表推送,Python都是实现报表开发的重要工具。

本篇分成两部分,首先讲解Python操作Excel基础用法(建表,建sheet,插入数据,合并单元格,获取行列数等),后面结合一个实例讲解如何利用python进行报表开发


一、Python操作Excel用法

公众号: 数据小斑马,关注即可获得价值1000元的数据分析学习资料

① 建立工作簿/建立工作表/插入值/保存excel

用的是openpyxl库,可以通过pip install openpyxl安装

# 引入库
from openpyxl import Workbook

# 建立新工作簿
wb = Workbook()

# 建立新工作表 data
ws1 = wb.create_sheet("data")

#修改sheet名称
ws1.title = "data_1"
# 设定sheet的插入位置
ws2 = wb.create_sheet("Mysheet", 0)
ws2.title = 'data_2'
# 设置sheet名的背景色
ws1.sheet_properties.tabColor = "1072BA"
# 获取sheet对象
print(wb["data_1"])

# 获取所有sheet名字
print(wb.sheetnames)

# 复制一个sheet
ws3 = wb.copy_worksheet(ws1)
ws3.title = 'data_3'
# 插入值,可以通过单元格字符+数字定位,如A1
ws1['A1']=5201314
ws1['B2']='forever'
#或者通过行和列定位,行号和列号都是从1开始,而不是从0开始
ws1.cell(row=1, column=2, value=10)
ws1.cell(row=2, column=3).value = 100
# 保存文件
wb.save(r'C:\Users\cindy407\Desktop\ceshi.xlsx')

打开ceshi.xlsx如下:
只需1秒,用python开发Excel报表也太快了!_第1张图片

② 打开文件/选择区域/合并单元格/插入图片

delivery_data.xlsx 是某平台销售和发货数据(文末有获取方式),之前有一篇文章进行过专项分析:

Pandas数据分析项目实战①——货品送达率,让你体会数据的魔力

# 打开现有文件
data = openpyxl.load_workbook(r'C:\Users\cindy407\Desktop\delivery_data.xlsx')
# 获取sheet名称
print(data.sheetnames)
# 获取最大行数、列数
print(data['原始数据'].max_row,data['原始数据'].max_column)
# 获得某一列的所有值
ws = data['原始数据']

for cell in ws['A'][1:]:
    print(cell.value,end=',')

print('*'*50)
# 获取某一行的所有值
for cell in ws[1]:
    print(cell.value,end=',')

# 制定一个操作区域
print()
for row in ws.iter_rows(min_row=1,min_col=1,max_row=5,max_col=5):
    for cell in row:
        print(cell.value,end=',')
    print()

# 获取所有行
row = []
for i in ws.iter_rows():
    row.append(i)

print(row)  # 所有行
print(row[1]) # 第一行
print(row[1][1]) # 第一行第一列单元格
print(row[1][1].value) # 第一行第一列单元格的值
# 插入图片
img = Image(r'C:\Users\cindy407\Desktop\logo.png')
ws.add_image(img, 'K1')

# 合并单元格
ws.merge_cells(start_row=1,start_column=1,end_row=1,end_column=3)
ws.merge_cells('C2:C5')
# 取消单元格,必须是合并的单元格范围
ws.unmerge_cells('C2:C5')

# 要保存后才能看到修改内容,如果是源文件一样的路径,则会替换原文件
data.save(r'C:\Users\cindy407\Desktop\delivery_data_1.xlsx')

打开delivery.data_1.xlsx如下:

只需1秒,用python开发Excel报表也太快了!_第2张图片

二、Python报表开发实例

公众号: 数据小斑马,关注即可获得价值1000元的数据分析学习资料

报表开发的顺序是:

step 1: 设定报表框架
step 2: 撰写SQL从数据库取出源数据
step 3: 利用Pandas进行数据清洗和处理
step 4: 存入Excel并保存至本地
step 5: 设置定时邮件发送给相关人员

之前一篇文章讲解过step 1 和 2
(python全球疫情分析,告诉你海外疫情到底有多严峻 | 附290行代码)

本次只讲解step 3和4,后续会讲解setp 5

先看下原始数据:
只需1秒,用python开发Excel报表也太快了!_第3张图片

想要实现的报表如下,监控每一天的销售、发货和用户反馈情况
只需1秒,用python开发Excel报表也太快了!_第4张图片

代码如下:

# PART 2 自动化报表
data = pd.read_excel(r'C:\Users\cindy407\Desktop\delivery_data.xlsx',sheet_name='原始数据')

# pandas行和列全部展示
pd.options.display.max_rows=None
pd.options.display.max_columns=None
# 1、订单、销售金额、发货订单数
df1 = data.groupby(['销售时间'])['订单号'].count() # 销售订单数
df2 = data.groupby(['销售时间'])[['数量','销售金额']].sum()  # 销量和金额
df3 = data.groupby(['销售时间'])['交货时间'].count()  # 交货订单数
# 2、发货天数分布
# 日期相加减,需先转变成日期格式,使用apply
data['销售时间1'] = data['销售时间'].apply(lambda x: datetime.strptime(x.replace('/','-'),'%Y-%m-%d'))
data['交货时间'] = data['交货时间'].apply(lambda x: datetime.strptime(x.replace('/','-'),'%Y-%m-%d'))
data['送货时间'] = (data['交货时间'] - data['销售时间1']).apply(lambda x: x.days)

# 连续型字段分成多区间,用pd.cut
bin = [0,14,30,60,90,120]
data['送货天数'] = pd.cut(data['送货时间'] ,bins=bin)

# 按销售时间维度进行统计
df4 = data.groupby(['销售时间','送货天数'])['销售时间'].count().unstack()

# 3、用户反馈情况
df5 = data.groupby(['销售时间','货品用户反馈'])['销售时间'].count().unstack()

# 4、数据按列拼接
df = pd.concat([df1,df2,df3,df4,df5],axis=1)

# 5、修改列名
df.columns=['销售订单数','销售件数','销售金额','已交货订单数','30-60天交货占比','90-120天交货占比','60-90天交货占比','拒收比例','质量合格比例','返修比例']


# 6、将数值转化成百分比
df['60-90天交货占比'] = df['60-90天交货占比']/df['已交货订单数']
df['90-120天交货占比'] = df['90-120天交货占比']/df['已交货订单数']
df['30-60天交货占比'] = df['30-60天交货占比']/df['已交货订单数']
df['拒收比例'] = df['拒收比例']/df['已交货订单数']
df['质量合格比例'] = df['质量合格比例']/df['已交货订单数']
df['返修比例'] = df['返修比例']/df['已交货订单数']

# 7、将汇总和明细存入同一个EXCEL
writer = pd.ExcelWriter(r'C:\Users\cindy407\Desktop\daily_report.xlsx')
df.to_excel(writer,sheet_name='汇总数据')
data.to_excel(writer,sheet_name='明细数据',index=False)
writer.save()

三、总结

python操作excel是很基础的用法,更高级的做法是用pandas替代excel进行处理,再存入Excel,所以掌握pandas的用法可能会更重要喔


本人互联网数据分析师,目前已出Excel,SQL,Pandas,Matplotlib,Seaborn,机器学习,统计学,个性推荐,关联算法,工作总结系列。


关注公众号“数据小斑马",回复"利用pandas" 即可免费获取《利用pandas进行数据分析》最新版,学习pandas必备;

回复“发货" 即可获得文中数据集和所有代码

你可能感兴趣的:(Pandas,Excel)