Python:善用query,从excel数据中批量提取数据到新文件

该博客讲述了如何利用Python的pandas库对xlsx格式的气象数据进行按小时筛选和插值处理。通过query函数结合变量,实现了对不同日期和时间的数据提取,并将结果保存为多个按小时划分的Excel文件。博客内容涉及数据读取、条件筛选、文件导出,主要针对数据处理和分析场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 最近新到一批气象数据,数据格式为xlsx,每组数据时间间隔为1小时。

STATION_NAMEDATEVALPROVINCECITYCNTYSTATION_ID_CSTATION_ID_DLATLONALTIYEARMONDAYHOURTEMPRE_1HPRE_24HWIN_S_AVG_2MIWIN_S_AVG_10MIWIN_S_MAX
顺义2020-12-31 16:00:00+00:00北京市543985439840.1333116.616728.62021110-8.1001.21.31.5
海淀2020-12-31 16:00:00+00:00北京市市辖区海淀区543995439939.9833116.283345.820212112-9.8000.30.30.9
延庆2020-12-31 16:00:00+00:00北京市延庆县544065440640.45115.9667487.920213115-7.1002.82.83.4
密云2020-12-31 16:00:00+00:00北京市544165441640.3833116.866771.820219123-12.9001.61.11.5

 需要对每小时的数据进行一次插值,因此要将数据按小时提取出来,2022010100,即为1月1日0时的所有站点数据。

对相关工具进行了解后,发现query完美满足需求。

另外由于需要批量处理,query中使用了变量名,这时候需要在query前加上@。

import pandas as pd
import xlwt

wb= pd.read_excel(r"F:\test.xlsx")  # pandas方法读取xlsx
print("列名{}".format(wb.columns.values))

for m in ['1', '3', '5', '7', '8', '10', '12']:
    for i in range(1, 32, 1):  # 逐日循环
        for j in range(24):
            month = int(m)
            info = int(i)
            joy = int(j)
            var = wb.query("(MON == @month)& (DAY == @info)& (HOUR == @joy)")
            #[wb.DAY == m & wb.DAY.isin(i) & wb.HOUR.isin(j)]  # 按小时筛选行数据
            filepath = r'F:\testresult\2022'+ '.'+str(m)+'.'+str(i)+ '.'+str(j)+'.xls'
            print(filepath)
            var.to_excel(filepath)
for mo in ['2', '4', '6', '9', '11']:
    for io in range(1, 31, 1):  # 逐日循环
        for jo in range(24):
            montho = int(mo)
            infoo = int(io)
            joyo = int(jo)
            var0 = wb.query("(MON == @motho)& (DAY == @infoo)& (HOUR == @joyo)")
            #[wb.DAY == m & wb.DAY.isin(i) & wb.HOUR.isin(j)]  # 按小时筛选行数据
            filepath = r'F:\testresult\2022'+ '.'+str(mo)+'.'+str(io)+ '.'+str(jo)+'.xls'
            print(filepath)
            var0.to_excel(filepath)

最后需要对2月的数据进行处理,删除掉多的29号、30号结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值