爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 11522|回复: 1

[经验总结] 一点微小的经验和各位讨论:datetime的基本用法

[复制链接]

新浪微博达人勋

发表于 2017-8-31 17:48:49 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 方自之 于 2017-9-1 08:12 编辑

       写在前面:站点实测资料是气象常见的资料形式,日均和月均也是最基本的统计手段。大家都会有这样的经历:实测数据常会出现缺测值和缺失值,在统计日月平均时就很难写成一个简单的循环。本帖结合楼主自学经历,介绍通过datetime来做日平均的个例,希望大佬多多提意见。
       任务:很简单,站点观测数据计算日平均。数据格式如图。       难点:数据缺失与缺测。数据缺失:并不是每天都是24个数据。数据缺测:某些时刻的数据显示缺测,值为‘9999’。
       思路:读取数据时,我们读取日期这一列,形成以string为单位的一个list,与变量是完全对应的。这样我们用datetime建立一个时间循环2016/01/01、2016/01/02...再用读取的日期列去匹配这个时间循环,只要两个字符串相等(其实datetime不是字符串类型,需要转换),对应的气象要素就属于同一天。这样就避免了每天相加求平均的次数不是恒定值的问题。
  1. start_day   = datetime.datetime.strptime('2016/1/1 0:00', '%Y/%m/%d %H:%M')#设定起始时间
  2. for d in range(0,366):
  3.     # firstly,we try to ues the fuction Datetime
  4.     delta = datetime.timedelta(days=d)  # 设定时间间隔

  5.     end_day_1 = start_day + delta
  6.     end_day = str(end_day_1)            # 没有找到datetime的格式化函数,只好绕道用time的格式化办法
  7.     timeArray = time.strptime(end_day, "%Y-%m-%d %H:%M:%S")
  8.     otherStyleTime = time.strftime("%Y/%m/%d", timeArray)
  9.     n = 0
  10.     m = 0
  11.     for i in range(0,len(day)):

  12.     #the type of 'day' is 2016/1/1,but we wish that is same as otherstyletime,just like
  13.     #2016/01/01.the fllowing code, we convert the type by using some fuction.
  14.         vert_day = day[i].split('/')
  15.         final_day= '%s/%02d/%02d' %(vert_day[0],int(vert_day[1]),int(vert_day[2]))
  16.         if final_day == otherStyleTime:
复制代码

        首先,我们用datetime.strptime()设定一个起始时间,输出一个内容为‘2016-01-01 00:00’的新类型,但我们需要的格式是字符串,形式为‘2016/1/1’。于是这里楼主用了些笨办法,走了些弯路。delta是时间间隔,这里设为一天,即d=365时,otherStyleTime=‘2016-12-31 00:00’。这个函数很好用,最小能设置一秒,还有很多时间计数法。由于没有找到如何把datetime改变格式的办法,就去调用了time.strftime(),但值得到了字符串‘2016/01/01’,离最终的‘2016/1/1’还有一步之遥,这时候可以利用python字符串的格式化%大法,改变otherStyleTime或day[:]。后面再具体计算每一天的和以及求日平均时,简单加一个计数器n就可以了。至于缺测值‘9999’,我知道numpy是有相关函数的,但我没有去查。我加判别条件跳过‘9999’。在计算极大值时,利用set()找到‘第二大值’。
       讨论:1、python的特色就是包多,所以函数很多,虽然是个很基础的任务,但也可以找出很多又用的函数。2、python感觉和Fortran很大的不同就是对于字符串的处理,连读文件都是默认全是字符串。适应处理字符串变量,是学习python的必经之路。3、我看了看手头的资料,每一年的日期格式都是五花八门:2016/1/1、2013-01-01、20120101...也是醉了,和大家讨论如何很高效的处理有缺失和缺测的站点数据


数据示例

数据示例
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-8-31 20:10:30 | 显示全部楼层
多谢楼主分享,尽管还没有开始学Python。。先分享,等忙完这阵好好学习{:5_213:}
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表