python 把excle中指定条件的sheet数据合并成一个表

该Python脚本用于读取Excel文件中的水文资料,提取年份信息,获取每月天数,并合并不同工作表数据。数据经过处理后,插入日期列并按日期排序,最后保存为新的Excel文件。
import calendar
import datetime
import pandas as pd
import xlwings as xw
import pandas as pd
import re



path= r"C:\Users\Thinkpad\Desktop\2022年水文资料.xlsx"
#-------------------获取表头文件名称及年份----------------------------------------------
app = xw.App(visible=True, add_book=False) # visible 隐式打开文件
book = app.books.open(path)  # 打开 excel
sht = book.sheets[0] # 选择 sheet
btwjm=sht.range('a1:a1').value #获取表头文件名称
print(btwjm)  #获取表头文件名称
nf=btwjm.split('年')[0][4:] #获取表头中的年份值
print(nf)
book.close() # 关闭
app.quit() # 退出
#-------------------获取表头文件名称及年份----------------------------------------------
#-------------------获取该年份12个月每个的天数----------------------------------------------
i=0
myts=['','','','','','','','','','','',''] #定义一个空列表用于存放该年每月的天数
my=['','','','','','','','','','','','']
while i < 12:
    #j=i+1
    myts[i]=calendar.monthrange(int(nf),i+1)[1]  #获取该年12个月每月的天数
    my[i]=str(i+1)+'月份'
    #print(myts[i])
    #print(my[i])
    i=i+1
#print(myts)
#print(my)
#-------------------获取该年份12个月每个的天数----------------------------------------------
#--------------------读取所有的sheet后合并成1张表-------------------------------------------
df = pd.read_excel(path, sheet_name=None) #获取excel表格的所有sheet名
sheetmc=list(df) #获取excel表格的所有sheet名存入列表中sheetmc
#print(sheetmc)
i=0
df = pd.DataFrame() #创建一个空的DataFrame
while i < len(sheetmc):
    yf = int(str(sheetmc[i]).split('月')[0])  # 获取当前sheet的月份
    if sheetmc[i]==my[yf-1]: #判断excel表中是否包含12个月的数据
        dq = pd.read_excel(path, sheetmc[i])
        dq = dq.loc[3:myts[yf-1] + 2]  # 因原始表中所有月天数都是31,这里需要根据该月的天数获取数据
        dq = dq.iloc[:, 1:12]  # 获取第一列到13列的数据
        # 对列名称进行重新命名
        dq.columns = ["雨量", "8时水位", "发电量", "发电用水", "弃水量", "生态供水", "径流水量", "流量", "温度", "库 容", "单耗"]
        # --------------------配置选取数据的时间段------------------------------------
        # sd获取第一个sheet中月份+01为开始日期
        sd = str(nf) + "/" + str(sheetmc[i]).split('月')[0] + "/" + "01"
        # ed获取最后一个sheet中月份+最后一个sheet中月份的天数为最后日期
        ed = str(nf) + "/" + str(sheetmc[i]).split('月')[0] + "/" + str(myts[int(str(sheetmc[i]).split('月')[0]) - 1])

        # 设置起始时间
        s_date = datetime.datetime.strptime(sd, '%Y/%m/%d').date()
        # 设置结束时间
        e_date = datetime.datetime.strptime(ed, '%Y/%m/%d').date()
        print(s_date)
        print(e_date)
        # freq="D"表示按天,可以按分钟,月,季度,年等
        date_range = pd.date_range(start=s_date, end=e_date, freq="D")
        dq.insert(0,'日期',date_range)
        # 把重新命名的结果重新保存
        dq["日期"] = dq["日期"].astype("datetime64")  # 确保数据格式为日期
        # 把日期列只保留年月日
        dq["日期"] = pd.to_datetime(dq["日期"]).dt.date
        # --------------------设置选取数据的时间段------------------------------------

        print(dq)
        df = pd.concat([df, dq])
    i=i+1

df.to_excel('C:\\Users\\Thinkpad\\Desktop\\'+str(nf)+"年水文雨量.xlsx")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字化信息化智能化解决方案

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值