使用python处理excel数据
python处理excel数据
excel数据有一列是开始时间,一列为结束时间,计算时间差,时间差>1h,将数据平均为1h。
时间差>1h,总量也将平均到每个小时,如第三行数据,时间差为4h,数据为5.2,所以每小时时间差为5.2/4,平均到每小时,并且在数据下插入行。
时间差计算
时间差计算方式代码
import os
import openpyxl
path = r"F:/"
os.chdir(path)
workbook = openpyxl.load_workbook('文件.xlsx')
sheet = workbook['sheet'] # 获取指定sheet表
sheet.insert_cols(idx=3, amount=1) # 在C列之前插入一列,作为时间差展示列
row = sheet.max_row # 获取列数
# 遍历AB两列,进行计算时间差,并把时间差写入新增的C行
for i in range(2, row+1):
time_first = 'A' + str(i)
time_last = 'B' + str(i)
time_diff = 'C' + str(i)
cell_first = sheet[time_first]
cell_last = sheet[time_last]
cell = sheet[time_diff]
if cell_first.value is None and cell_last.value is None: # AB列出现None后退出循环
break
time_all = (cell_last.value - cell_first.value)*24 # 因表格之中就是时间格式进行计算
if time_all.days < 0: # 因表格中跨半夜0:00,日期并不增加,所以需要+24进行修正
time = time_all.days + 24
sheet[time_diff] = time
else:
sheet[time_diff] = time_all.days
workbook.save('文件.xlsx')
平均量计算
平均量计算方法代码
import os
import openpyxl
import datetime
path = r"F:/"
os.chdir(path)
workbook = openpyxl.load_workbook('文件.xlsx')
sheet = workbook['sheet'] # 获取指定sheet表
cell1 = sheet['A4']
cell2 = sheet['B4']
row = sheet.max_row # 获取列数
# 使用while循环进行遍历表格,因需要在循环之中更改i的值,所以不可使用for循环
i = 2
# for i in range(2, row+1): # 不管在循环内部怎么更改i的值,计数器的值始终不变
while i < row + 1:
time_first = 'A' + str(i)
time_last = 'B' + str(i)
time_diff = 'C' + str(i) # 获取时间差一栏,与总量一栏
rain = 'D' + str(i)
cell_time = sheet[time_diff]
if cell_time.value is None: # 如果出现None数据则退出循环
break
if cell_time.value != 1: # 时间差不是1的数据,则对于降水量进行平均分到每个小时
print(i)
sheet.insert_rows(idx=i + 1, amount=cell_time.value - 1) # 在不是1的时间差下面加入多行数据
cell_rain = sheet[rain]
# print(cell_rain.value)
time1 = sheet[time_first]
time2 = sheet[time_last]
rain_ava = cell_rain.value / cell_time.value # 计算平均每小时降水量
sheet[rain] = rain_ava
for j in range(1, cell_time.value): # 循环将平均每小时降水量进行写入
a = 'D' + str(j + i)
b = 'C' + str(j + i)
sheet[a] = rain_ava
sheet[b] = 1
i = i + cell_time.value # 跳过插入行
sheet[time_diff] = 1 # 时间差都为1
i = i + 1 # i+1 从而进行数据遍历
workbook.save('文件.xlsx')