首页 > 编程语言 >python批量计算多站点多年标准化降水指数SPI

python批量计算多站点多年标准化降水指数SPI

时间:2023-07-26 16:14:23浏览次数:39  
标签:python excel rain df2 站点 SPI pd

前面提过如何计算单站点多年的标准化降水指数SPI,但是在现实中不仅只计算一个站点的标准化降水指数,有时要计算多个站点的。

原始数据是11个站点1961年至2022年每个月的降水值:

 编程思路是:

1、先需要进行站点分类:

     此处的难点在于需要写个for循环,根据站点名称遍历数据

   

for i in nameList:
    # 进行站点遍历
    dfName = df[df['name'] == i]

 

2、分类后的站点,提取出rain值

     此处需要将循环后的站点值根据rain提取出来关键语法是

rain = dfName.rain.values

 

3、利用提取后的rain值进行SPI指数的计算

# 计算标准化降水指数SPI
    SPI1 = gma.climet.SPI(rain)
    SPI3 = gma.climet.SPI(rain,Scale = 3)
    SPI5 = gma.climet.SPI(rain,Scale = 5)

    # 创建一个新DataFrame放入分类好后的站点数据
    df2 = pd.DataFrame(dfName)
    # 把计算好的SPI值放入df2新增第一列、第二列、第三列
    df2.insert(loc=0,column='SPI1',value=SPI1)
    df2.insert(loc=1,column='SPI3',value=SPI3)
    df2.insert(loc=2, column='SPI5', value=SPI5)
    # print(df2)

 

4、将算好后的SPI写入到excel中

      此处简直是我的大难题,因为按站点算出来的结果,直接写入excel采用如下方法,

只会得到最后一个站点的结果,之前的站点的结果都被覆盖了,此种方法是错误的

df2.to_excel('G:/drought/processdata/lianxi/鄂尔多斯SPI.xlsx')


正确方法是:
(1)初始化一个列表
(2)在for循环里边每次产生的dataframe df2,要open的进去,然后在外边循环。
(3)把dataframe的列表temp=[]给合并起来,采用pd.concat(),把这个装满了,生成一个最终的RDF
(4)把RDF写入excel,就都拼起来完整了。
temp=[]
for i in xxx:
    temp.append(df2)
rdf=pd.concat(temp,axis=0)
rdf.to_excel('res.xlsx')

完整代码如下:

#!usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author: Su
@file: get_staion_id.py
@time: 2023/07/26
@desc:
"""
import pandas as pd
import gma

# 打开excel文件
df = pd.read_excel('G:/drought/processdata/lianxi/鄂尔多斯.xlsx')
# 初始化空列表为了把spi数据写入excel,避免excel总是仅得出最后一个数的情况
temp = []
# 给站点分类
nameList = set(df.name.values)

# 先写个循环进行站点分类,再提取rain值进行SPI计算
for i in nameList:
    # 进行站点遍历
    dfName = df[df['name'] == i]
    #df2 = pd.DataFrame()
    # 提取rain值
    rain = dfName.rain.values
    # 计算标准化降水指数SPI
    SPI1 = gma.climet.SPI(rain)
    SPI3 = gma.climet.SPI(rain,Scale = 3)
    SPI5 = gma.climet.SPI(rain,Scale = 5)

    # 创建一个新DataFrame放入分类好后的站点数据
    df2 = pd.DataFrame(dfName)
    # 把计算好的SPI值放入df2新增第一列、第二列、第三列
    df2.insert(loc=0,column='SPI1',value=SPI1)
    df2.insert(loc=1,column='SPI3',value=SPI3)
    df2.insert(loc=2, column='SPI5', value=SPI5)
    # print(df2)
    # 将循环出来的结果,按站点名字一个一个的写入excel
    temp.append(df2)
    # 整合DataFrame列表里的数据,进行纵向拼接
    rdf = pd.concat(temp,axis=0)
    # print(rdf)
    rdf.to_excel('G:/drought/processdata/lianxi/鄂尔多斯SPI.xlsx')

 


标签:python,excel,rain,df2,站点,SPI,pd
From: https://www.cnblogs.com/shirleysu90/p/17582604.html

相关文章

  • python 开发环境管理 pyenv, poetry
    下载python任何一个版本,比如python3.8安装pyenv-winlink:https://github.com/pyenv-win/pyenv-win/blob/master/docs/installation.md#add-system-settings步骤: pipinstallpyenv-win--target%USERPROFILE%\\.pyenvorpipinstallpyenv-win--target%USE......
  • Python采集主播照片,实现人脸识别, 进行颜值评分,制作颜值排行榜
    昨晚一回家,表弟就神神秘秘的跟我说,发现一个高颜值网站,非要拉着我研究一下她们的颜值高低。我心想,这还得要我一个个慢慢看,太麻烦了~于是反手用Python给他写了一个人脸识别代码,把她们的照片全部爬下来,自动检测颜值打分排名。这不比手动快多了?准备工作开发环境Py......
  • 安装easy_install 和ipython
    从链接http://pypi.python.org/pypi/setuptools#downloads处获得相应的版本运行shsetuptools-0.6c9-py2.4.egg(跟用户权限,若没有可以指定--prefix=~)安装完毕对python2.6可运行下面代码:#!/bin/bash#wgethttp://pypi.python.org/packages/2.6/s/......
  • python 读取文件夹
    importos#返回一个列表['01.xlsx','EE_reg.txt','EEData.txt','ERENR.txt','ER-25.txt']file_names=os.listdir('D:\\yuyu\\test_yuyu\\accessibility_1\\APP_Employer_EE_Enrolment')file=op......
  • python通过SSE与html主动通讯
    博客:使用Python通过SSE与HTML实现主动通讯在现代Web应用中,实时性和交互性成为了越来越重要的需求。服务器向客户端主动推送数据,而不是等待客户端发送请求,就是一种实现实时通讯的方式。Server-SentEvents(SSE)正是一种用于实现这种服务器主动推送的技术。本文将介绍如何使......
  • Python做成计划任务
    将Python脚本转换为可执行文件(.exe文件)&把一个Python脚本注册为windows服务-陈致远大侠-博客园(cnblogs.com)书再接上回,为这样一个小项目花这么大力气,弄这么大阵仗不是我的处事风格。所以只好转战计划任务了。计划任务也是不支持直接运行python,示例如下:......
  • [爬虫]2.3.1 使用Python操作文件系统
    Python提供了许多内置库来处理文件系统,如os、shutil和pathlib等,这些库可以帮助你创建、删除、读取、写入文件和目录。读取文件在Python中,你可以使用内置的open函数来打开一个文件。open函数返回一个文件对象,你可以对这个对象进行各种操作。以下是一个读取文件的例子:withopen(......
  • Spire.XLS of.net 怎么设置字体样式(普通单元格和带公式的单元格)
    普通的设置就直接套用官方文档即可//创建字体ExcelFontfont1=workbook.CreateFont();//设置字体,字形,大小,颜色font1.FontName="宋体";font1.IsBold=true;font1.Size=10;font1.KnownColor=ExcelColors.Blue;//为A1单元格......
  • 如何用python做一个exe程序快速爬取文章?
    我用了99藏书网作为例子九九藏书网(99csw.com)注:本程序主要用于快速复制99藏书网中的小说,有些参数我要在开头先解释清楚 一、导入库importtkinterastkfromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.common.a......
  • python实现自动切换壁纸(win10)
    因为本人工作环境特殊,很多软件的下载很麻烦,而且违规。然后发现域策略有变更,之前貌似不可以自己换壁纸。我是一个对任何重复的事物都十分容易腻的人,壁纸也包括在内,所以决定写一个自动切换壁纸的脚本importosimportctypesimporttimefromdatetimeimportdatetime#放......