请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 23087|回复: 21

[经验总结] python批量读取nc,按时间维进行合并

[复制链接]

新浪微博达人勋

发表于 2021-9-25 10:33:20 | 显示全部楼层 |阅读模式

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

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

x
每次做这个都要翻以前的代码,来这里记录一下(我目前只会用python这一种方法,如果有其他行之有效的,求大佬们指点)




#导入需要的库包
import xarray as xr
import os
import numpy as np
path = 'h:/data/olr_1979-2018/'  #输入文件存储路径
folder = os.walk(path)  #生成器,里面包含三个东西:根目录,根目录下的目录和文件;生成器只能用list读取
files = list(folder)[0][2]  #选择文件名集合的list
data_all = []
a=[]
b=[]
for file in files:
    f = xr.open_dataset(path+'/'+file)
    #读取变量,如果数据过大可以索引,但索引后合成的nc文件无法再索引
    lon=f['lon']
    lat=f['lat']
    time=f['time']
    olr=f['olr']

#concat函数按维度合并   
    for t in time:
        a.append(t)
    t_al=xr.concat(a,dim='time')

    for olr1 in olr:
        b.append(olr1)
    olr_al=xr.concat(b,dim='time')
print(t_al.shape)
#写成dataarray
OLR=xr.DataArray(data=olr_al,dims=('time','lat','lon'),
                coords=dict(time=t_al,lat=lat,lon=lon))
#dataarray转化为dataset
ds=xr.Dataset({'olr':OLR})
#输出成nc文件
ds.to_netcdf(r'h:/data/olr_al.nc')

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2021-9-25 10:37:52 | 显示全部楼层
声明:代码不是原创,我也忘记了我在哪里看到的了,非常非常nice~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-10-31 13:49:14 | 显示全部楼层
谢谢你,帮大忙了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-11-24 09:13:56 | 显示全部楼层
这里的合并是什么意思呀,sum()吗
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-11-24 10:12:49 | 显示全部楼层
这个脚本我试了下,发现因为我的却缺time,所以代码没法执行。

我的nc文件形式如下:
GWRwSPEC_CHi_200701_200712-RH35.nc
里面变量:
LAT
LON
PM25

有三个变量,但是没有时间,时间在文件名里(如上面的200701_200712).


每个文件都是这样的,请问下这样的nc文件怎么能合啊。


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-11-25 21:27:57 | 显示全部楼层
有用,感谢!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2021-11-28 09:55:03 | 显示全部楼层
学习一下啦
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-12-3 10:22:56 | 显示全部楼层
太感谢了!真的是太需要了!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-12-5 11:52:03 | 显示全部楼层
Bravery 发表于 2021-11-24 09:13
这里的合并是什么意思呀,sum()吗

这里的合并是针对时间维的,如果原始数据是10年的(time, lev, lat, lon)(365,10,10,10),时间维是逐日的,那合并后的数据集就是(time, lev, lat, lon)(3650,10,10,10)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-12-5 11:54:52 | 显示全部楼层
独孤酒见 发表于 2021-11-24 10:12
这个脚本我试了下,发现因为我的却缺time,所以代码没法执行。

我的nc文件形式如下:

可以建立一个四维数组,把你每个文件的数据循环存进去
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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