持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
创作背景
某天晚上有位文科生好朋友问我,如何让Excel中的数据先四舍五入再求和。
最后在百度上查到了方法。但是想着Python不就是处理数据的好手吗?遂有此篇。
数据准备
有如下数据
如果相加之后,他们的和是 5.1118 ,四舍五入之后保留两位小数,即 5.11。如下Excel 计算结果,使用的是SUM函数:
但这不是我们想要的结果,它是先求和再四舍五入的结果,虽然看起来是四舍五入了。
其实用Excel也能达到我们“数据先四舍五入再求和”的目的。使用=SUMPRODUCT(ROUND((D2:D5),2))即可:
Python 求解
Python环境准备
这点作为文科生不需要知道太多细节,可以略过。也即默认电脑上有Python环境,代码复制进去改改就能用。
引入excel
只需要一句话即可,后面的是Excel路径,再打开文件(open_workbook)即可:
#打开文件,获取excel文件的workbook(工作簿)对象
excel = xlrd.open_workbook("C:\\Users\\syl\\Documents\\工作簿1.xlsx",encoding_override="utf-8")
读取sheet
根据Excel的sheet名称读取:也即方法 sheet_by_name:
# sheet 名称
data1=excel.sheet_by_name('data1')
计算数据
读取到sheet,就可以读取他的数据了,读取之前我们明确读取数据的行标,列标(从0开始数起) 即可:
# 第几行数据开始 0开始
row_start=1
# 第几行数据结束 0开始
row_end=4
# 需要读第几列的数据 0开始
cell_index=3
# 保留几位小数
round_num=2
循环数据
Python中的循环用for i in range(m,n)即可,这句话意思是循环m到n-1:
for i in range(1,5):
print(i," ",end="")
结果为:
那么循环Excel可以这么写:
for each_row in range(row_start,row_end+1):#循环打印每一行
再用round函数四舍五入即可:
sum_data+=round(data1.cell_value(each_row,cell_index),round_num)
其中函数data1.cell_value(row_idex,cell_index),即 取某行某列位置上的数据。
完整代码如下:
import xlrd
#打开文件,获取excel文件的workbook(工作簿)对象
excel = xlrd.open_workbook("C:\\Users\\syl\\Documents\\工作簿1.xlsx",encoding_override="utf-8")
# sheet 名称
data1=excel.sheet_by_name('data1')
# 第几行数据开始 0开始
row_start=1
# 第几行数据结束
row_end=4
# 需要读第几列的数据 0开始
cell_index=3
# 保留几位小数
round_num=2
for i in range(1,5):
print(i," ",end="")
print()
print("round then add------")
sum_data=0
for each_row in range(row_start,row_end+1):#循环打印每一行
print(data1.cell_value(each_row,cell_index),
"round ",round(data1.cell_value(each_row,cell_index),round_num))
sum_data+=round(data1.cell_value(each_row,cell_index),round_num)
print(sum_data)
print("add then round------")
sum_data1=0
for each_row in range(row_start,row_end+1):#循环打印每一行
print(data1.cell_value(each_row,cell_index))
sum_data1+=data1.cell_value(each_row,cell_index)
print(sum_data1,"round",round(sum_data1,round_num))
测试结果如下: