爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 60119|回复: 27

[经验总结] python合并nc文件

[复制链接]

新浪微博达人勋

发表于 2021-2-4 20:06:16 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Choo-Choo 于 2021-2-7 00:03 编辑

分享一段用python合并nc文件的程序,如有错误或更好的方法欢迎指正~

数据来源:CMIP6(需要合并的变量为time和pr)

#导入需要的库包
import xarray as xr
import os
import numpy as np
#获取文件路径
paths=os.chdir(r'D:/sp/H')
list_path=os.listdir(os.getcwd())
#两个空的list,用在concat函数里
a=[]
b=[]
#批量读取文件
for paths in list_path:
    f=xr.open_mfdataset(paths, chunks=None, concat_dim='_not_supplied',
                          #compat='override',
                          coords='different',
                          combine='by_coords', autoclose=None, parallel=False)
#转换时间格式
    f=f.assign_coords(time=f.indexes['time'].to_datetimeindex())
#读取变量,如果数据过大可以索引,但索引后合成的nc文件无法再索引
    lon=f['lon']
    lat=f['lat']
    time=f['time']
    pr=f['pr']
#concat函数按维度合并   
    for t in time:
        b.append(t)
    t_al=xr.concat(b,dim='time')
    for p in pr:
        a.append(p)
    pr_al=xr.concat(a,dim='time')
#写成dataarray
pr=xr.DataArray(data=pr_al,dims=('time','lat','lon'),
                coords=dict(time=t_al,lat=lat,lon=lon))
#dataarray转化为dataset
ds=xr.Dataset({'pr':pr})
#输出成nc文件
ds.to_netcdf(r'D:/sp/H/high.nc')





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

新浪微博达人勋

发表于 2021-2-9 21:15:33 | 显示全部楼层
找到一个超级简单的合并方法,我的是ER-interim的数据,文件夹里有几十个逐年nc文件,格式是yyyydivergence.nc,只有yyyy是变的,所以代码如下!

import xarray as xr
ds = xr.open_mfdataset('D:/ERA-Interim/divergence/*divergence.nc')
ds.to_netcdf(r'D:/ERA-Interim/divergence/divergence.nc')
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 1

使用道具 举报

新浪微博达人勋

发表于 2021-2-4 20:20:39 | 显示全部楼层

回帖奖励 +1 金钱

感谢感谢!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2021-2-5 09:12:48 | 显示全部楼层
感谢老师分享~~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-2-10 10:44:19 | 显示全部楼层
LemonTree007 发表于 2021-2-9 21:15
找到一个超级简单的合并方法,我的是ER-interim的数据,文件夹里有几十个逐年nc文件,格式是yyyydivergence ...

好棒~学习一下~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-3-22 21:09:38 | 显示全部楼层
LemonTree007 发表于 2021-2-9 21:15
找到一个超级简单的合并方法,我的是ER-interim的数据,文件夹里有几十个逐年nc文件,格式是yyyydivergence ...

谢谢谢谢 刚好用上了!很方便
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-13 10:34:46 | 显示全部楼层
LemonTree007 发表于 2021-2-9 21:15
找到一个超级简单的合并方法,我的是ER-interim的数据,文件夹里有几十个逐年nc文件,格式是yyyydivergence ...

求助,用这个方法合并nc文件以后发现某些时次部分变量的值发生了改变,甚至变小一个量级
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-18 11:08:06 来自手机 | 显示全部楼层
为什么用了该代码,合并的nc文件没有dimensions
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-18 11:12:31 来自手机 | 显示全部楼层
LemonTree007 发表于 2021-2-9 21:15
找到一个超级简单的合并方法,我的是ER-interim的数据,文件夹里有几十个逐年nc文件,格式是yyyydivergence ...

这个简便代码太棒了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-6-1 21:03:49 | 显示全部楼层
楼主我按照您的code运行报了这样的错,百度也没有看到合适的解答,希望您有空帮我看下
  File "D:/python/merge-nc.py", line 17, in <module>
    f=f.assign_coords(time=f.indexes['time'].to_datetimeindex())
AttributeError: 'DatetimeIndex' object has no attribute 'to_datetimeindex'
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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