前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pandas实战 | NC格式站点观测转csv表格

pandas实战 | NC格式站点观测转csv表格

作者头像
MeteoAI
发布2021-11-12 16:58:24
1.6K0
发布2021-11-12 16:58:24
举报
文章被收录于专栏:MeteoAI

今年拿到的观测资料是nc格式,为了保证去年的脚本还能正常使用,可以考虑先将观测转为csv表格。NC数据的信息如下:

代码语言:javascript
复制
   dimensions:
      time = 1
      station = 3956  // unlimited
      strlen = 30
   variables:
      character stid ( station, strlen )

      float lon ( station )
         units :  degrees_east
         longname :  longitude

      float lat ( station )
         units :  degrees_east
         longname :  latitude

      float elev ( station )
         units :  meter
         longname :  elevation

       integer wd10a ( station, time )
         units :  degree
         longname :  Wind Direction,10 minute average value

      float ws10a ( station, time )
         units :  m/s
         longname :  Wind speed,10 minute average value

主要用到了两个库

  • netCDF4:用于读取nc文件中的变量
  • pandas:用于生产dataframe对象和输出csv文件

示例脚本

代码语言:javascript
复制
import netCDF4 as nc 
import numpy as np 
import pandas as pd

filename = "20210301100000.nc"
fout = "test.csv"

fn = nc.Dataset(filename,"r")
stid  = fn.variables['stid']
stid  = np.apply_along_axis(lambda x: x.tobytes().decode("utf-8"), 1, stid[:].data)

lon  = fn.variables['lon']
lat  = fn.variables['lat']
elev = fn.variables['elev']
wd10a = fn.variables['wd10a'] # Wind Direction,10 minute average value
ws10a = fn.variables['ws10a'] # Wind speed,10 minute average value

df = pd.DataFrame( { 'stid' : stid, 
                     'lon'  : lon[:], 
                     'lat'  : lat[:], 
                     'elev' : elev[:],
                     'wd10a': wd10a[:,0], # 必须是1维
                     'ws10a': ws10a[:,0],
                   } )
df.to_csv(fout, index=False)

另外需要注意一下stid的处理,stid变量的内容如下:

代码语言:javascript
复制
[[b'5' b'4' b'3' ... b'' b'' b'']
 [b'5' b'4' b'4' ... b'' b'' b'']
 [b'5' b'4' b'4' ... b'' b'' b'']
 ...
 [b'C' b'S' b'2' ... b'' b'' b'']
 [b'C' b'S' b'2' ... b'' b'' b'']
 [b'C' b'S' b'2' ... b'' b'' b'']]

这是一个二维的character变量,第0维表示不同的站点,第1维表示的是每个站点的id,每一位存放一个字符。我们需要通过np.apply_along_axis利用匿名函数lambda x: x.tobytes().decode("utf-8")将原始数据按行合并成字符串并解码为utf-8格式。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MeteoAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档