写给文科生的Python 使用教程

311 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

创作背景

某天晚上有位文科生好朋友问我,如何让Excel中的数据先四舍五入再求和

最后在百度上查到了方法。但是想着Python不就是处理数据的好手吗?遂有此篇。

数据准备

有如下数据

image.png

如果相加之后,他们的和是 5.1118 ,四舍五入之后保留两位小数,即 5.11。如下Excel 计算结果,使用的是SUM函数:

image.png

但这不是我们想要的结果,它是先求和再四舍五入的结果,虽然看起来是四舍五入了。

其实用Excel也能达到我们“数据先四舍五入再求和”的目的。使用=SUMPRODUCT(ROUND((D2:D5),2))即可:

image.png

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)即可,这句话意思是循环mn-1

for i in range(1,5):
        print(i," ",end="")

结果为:

image.png

那么循环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))

测试结果如下:

image.png