现有如下某城市的2000-2017年人口和GDP数据的excel文件,需要计算其中人均GDP这一列的指标结果。
虽然这个工作在excel中直接下拉公式即可完成,但如果有50个城市的该种数据,显然下拉公式也是很费功夫的。
因此,有必要讨论通过python在excel中做批量计算的情况。
但是,可以看到,人口和GDP数据都有空值,不是每年都有的。此时,应该考虑try-ecept语句来处理异常情况。代码如下:
import openpyxl as op
file="某市人口和GDP数据.xlsx"
wb=op.open(file,data_only=True) #打开excel文件,并仅读取数值
sheet_name=wb.get_sheet_names() #获取工作簿所有工作表,实际上只有一个
ws=wb[sheet_name[0]] #打开第一个工作表
rows=ws.max_row #获取工作表的最大行数
for i in range(rows-1):
#采用try-except语句处理空值单元格
try:
a=ws.cell(2+i,3).value/ws.cell(2+i,2).value*10**4 #计算人均GDP,单位转换系数为10**4,即10000
ws.cell(2+i,4,value=a)
except TypeError:
ws.cell(2+i,4,value="")
wb.save(file)
代码运行结果如下:
如果不做空值的异常处理,即代码如下:
import openpyxl as op
file="某市人口和GDP数据.xlsx"
wb=op.open(file,data_only=True) #打开excel文件,并仅读取数值
sheet_name=wb.get_sheet_names() #获取工作簿所有工作表,实际上只有一个
ws=wb[sheet_name[0]] #打开第一个工作表
rows=ws.max_row #获取工作表的最大行数
for i in range(rows-1):
a=ws.cell(2+i,3).value/ws.cell(2+i,2).value*10**4 #计算人均GDP,单位转换系数为10**4,即10000
ws.cell(2+i,4,value=a)
wb.save(file)
则会出现TypeError错误,即“unsupported operand type(s) for /:'float' and 'NoneType'”,如下图:
本文对应的excel文件已上传。