栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

计算逐站逐年极端高温;逐年逐站高温出现的初日和终日;最长连续高温

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

计算逐站逐年极端高温;逐年逐站高温出现的初日和终日;最长连续高温

# -*- coding: utf-8 -*-
"""
@Author: xxx
@Features of this code:计算逐站逐年极端高温;逐年逐站高温出现的初日和终日;最长连续高温
"""
import pandas as pd
import numpy as np

data = pd.read_excel('高温1961-2021.xlsx')
data = np.array(data)
print('结束数据读取')
# 年份转换行数
mark = []
for i in range(4, len(data) - 1):
    if data[i, 0] != data[i + 1, 0]:
        mark.append(i)
mark.insert(0, 3)

# 逐年逐站极端高温;逐年逐站高温出现的初日和终日;最长连续高温
tmax = np.zeros([len(mark) - 1, np.size(data, 1)])
max_htdays = np.zeros([len(mark) - 1, np.size(data, 1)])
day_begin = np.zeros([len(mark) - 1, np.size(data, 1)])
day_end = np.zeros([len(mark) - 1, np.size(data, 1)])
for index in range(len(mark) - 1):
    data_n = data[mark[index] + 1:mark[index + 1], :]
    tmax[index, :] = np.nanmax(data_n, axis=0)  # 逐年逐站极端高温
    # 逐年逐站高温出现的初日
    for col in range(3, np.size(data_n, 1)):
        for day in range(np.size(data_n, 0)):
            if data_n[day, col] >= 35:
                day_begin[index, col] = day
                break
    # 逐年逐站高温出现的终日,思路:逆序第一个大于35的日数就是终日
    for col in range(3, np.size(data_n, 1)):
        for day in range(np.size(data_n, 0) - 1, 0, -1):
            if data_n[day, col] >= 35:
                day_end[index, col] = day
                break
    # 逐年逐站最长连续高温日数
    for col in range(3, np.size(data_n, 1)):
        ht_begin = [0] # 初始值赋为0,避免全年无高温日数导致的计算错误
        ht_end = [0]
        day = 0
        while day < np.size(data_n, 0):
            if data_n[day, col] < 35:
                day += 1
            else:
                ht_begin.append(day)
                while data_n[day + 1, col] >= 35:
                    day += 1
                else:
                    ht_end.append(day)
                    day += 1
        max_htdays[index, col] = np.max(np.array(ht_end) - np.array(ht_begin))

tmax = np.delete(tmax, [1, 2], axis=1)
max_htdays = np.delete(max_htdays, [1, 2], axis=1)
max_htdays[:,0] = range(1961,2021)
day_begin[:, 0] = range(1961, 2021)
day_end[:, 0] = range(1961, 2021)
day_begin = np.delete(day_begin, [1, 2], axis=1)
day_end = np.delete(day_end, [1, 2], axis=1)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/280492.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号