我正在学习如何使用 Anaconda 中的 Python 模块来使用 netCDF4。我正在尝试将值附加到我创建的两个变量time和field:
from netCDF4 import Dataset
import numpy as np
root_grp = Dataset('py_netcdf4.nc', 'w', format='NETCDF4')
root_grp.description = 'Example simulation data'
ndim = 128 # Size of the matrix ndim*ndim
xdimension = 0.75
ydimension = 0.75
# dimensions
root_grp.createDimension('time', None)
root_grp.createDimension('x', ndim)
root_grp.createDimension('y', ndim)
# variables
time = root_grp.createVariable('time', 'f8', ('time',))
x = root_grp.createVariable('x', 'f4', ('x',))
y = root_grp.createVariable('y', 'f4', ('y',))
field = root_grp.createVariable('field', 'f8', ('time', 'x', 'y',))
# data
x_range = np.linspace(0, …Run Code Online (Sandbox Code Playgroud) 我想在绘制 netCDF 数据集中的数据时掩盖海洋。我遵循了这个问题的答案中给出的重要指示。它对半个世界都有效,但不知何故,格林威治以西的一切也都被遮盖了,无论是海洋还是陆地。这是我的代码:
import netCDF4
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import mpl_toolkits
from mpl_toolkits import basemap
from mpl_toolkits.basemap import Basemap, maskoceans
filename = 'myfile.nc'
vmin = 0.
vmax = 1
nc = netCDF4.Dataset(filename, 'r')
data = nc.variables['sum'][:]
lats_1d = nc.variables['lat'][:]
lons_1d = nc.variables['lon'][:]
lons, lats = np.meshgrid(lons_1d, lats_1d)
labels = ['DJF', 'MAM', 'JJA', 'SON']
cmap = cm.RdYlBu
cmap.set_over('#00FF00')
my_dpi = 96
fig = plt.figure(figsize=(1200/my_dpi, 800./my_dpi))
for season …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Microsoft 的科学数据集库 (SDS)从 NetCDF 文件中提取数据。我仅限于使用 MS SDS 和 C#。我不是一名程序员,所以我正在努力让基础知识发挥作用。首先,我想编写一个简单的脚本来提取数据并将其写入 .csv 文件。使用介绍文档和 Codeplex 教程。我尝试编写一个简单的 C# 控制台应用程序,它只读取文件并将其写入控制台,或者理想情况下写入 .csv 文件。
使用 SDS 1.3 命令行我可以查看测试文件的内容:
D:\NetCDF>sds list test.nc
[2] ACPR of type Single (Time:85) (south_north:213) (west_east:165)
[1] Times of type SByte (Time:85) (DateStrLen:19)
D:\NetCDF>
Run Code Online (Sandbox Code Playgroud)
我的脚本如下所示:
using System;
using System.IO;
using sds = Microsoft.Research.Science.Data;
using Microsoft.Research.Science.Data.Imperative;
namespace NetCDFConsoleApp
{
class Program
{
static void Main(string[] args)
{
/// Gets the path to the NetCDF file to be used as a data source. …Run Code Online (Sandbox Code Playgroud) 假设我的时间数据在 xarray 数据集中如下所示:
ds = xr.Dataset({'time': pd.date_range('2000-01-01', periods=10)})
ds.to_netcdf('asdf.nc')
Run Code Online (Sandbox Code Playgroud)
xarray 的to_netcdf()方法将时间维度输出为 int64:
$ ncdump -v time asdf.nc
netcdf asdf {
dimensions:
time = 10 ;
variables:
int64 time(time) ;
time:units = "days since 2000-01-01 00:00:00" ;
time:calendar = "proleptic_gregorian" ;
data:
time = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ;
}
Run Code Online (Sandbox Code Playgroud)
因为我正在使用不支持 int64 的 THREDDS 服务器,所以我希望这些时间数据为 int32。使用 xarray 可以做到这一点吗?
我使用 xarray 导入不同的 netCDF 文件,最终需要将它们全部转换为一个 panda 数据帧。这是一个包含天气数据的文件,随着时间的推移,某些纬度和经度的观测值丢失了许多(因为它们位于海洋中部)。坐标:纬度、经度、时间;变量:温度、预温度。在转换为数据框之前,我想摆脱这些缺失的观察/整个坐标。有没有一种简单有效的方法来使用 xarray 来做到这一点?我在文档中没有找到任何内容。
import pandas as pd
import xarray as xr
path = 'Z:/Research/Climate_change/Climate_extreme_index/CRU data/'
temp_data = path+'cru_ts4.01.1901.2016.tmp.dat.nc'
pre_data = path+'cru_ts4.01.1901.2016.pre.dat.nc'
# Open netcdf
def open_netcdf(datapath):
print("Loading data...")
data = xr.open_dataset(datapath, autoclose=True, drop_variables='stn', cache=True)
return data
# Merge dataframes
data_temp = open_netcdf(temp_data)
data_pre = open_netcdf(pre_data)
all_data = xr.merge([data_temp, data_pre])
#################################################################
<xarray.Dataset>
Dimensions: (lat: 360, lon: 720, time: 1392)
Coordinates:
* lon (lon) float32 -179.75 -179.25 -178.75 -178.25 -177.75 -177.25 ...
* lat (lat) float32 …Run Code Online (Sandbox Code Playgroud) 我刚来这地方。首先,我非常感谢您的时间和考虑。我有两个关于在 python 中管理 2 个不同的 netcdf 文件的问题。我进行了很多搜索,但不幸的是我找不到解决方案。
1-我有一个 netcdf 文件,其坐标如下:
time datetime64[ns] 2016-08-16T22:00:00
* y (y) int32 220000 ... 620000
* x (x) int32 20000 ... 720000
lat (y, x) float64 dask.array<shape=(401, 701),
lon (y, x) float64 dask.array<shape=(401, 701),
Run Code Online (Sandbox Code Playgroud)
我需要将坐标更改为经度/纬度,以便我可以根据特定的经度/纬度坐标(通过使用 xarray)对区域进行切片。但我不知道如何将 x 和 y 更改为 lon lat。这是我的代码:
import xarray as xr
import matplotlib.pyplot as plt
p = "R_201608.nc"
ds = xr.open_mfdataset(p)
q=ds.RR.sel(time='2016-08-16T21:00:00')
Run Code Online (Sandbox Code Playgroud)
2-与 1 类似,我有另一个 netcdf 文件,其坐标如下:
* X (X) float32 557600.0 .. 579400.0
* Y (Y) float32 5190600 ... …Run Code Online (Sandbox Code Playgroud) netcdf coordinate-transformation python-3.x python-xarray netcdf4
我使用 xarray 在 python 中打开了一个 netcdf 文件,数据集摘要如下所示。
Dimensions: (latitude: 721, longitude: 1440, time: 41)
Coordinates:
* longitude (longitude) float32 0.0 0.25 0.5 0.75 ... 359.25 359.5 359.75
* latitude (latitude) float32 90.0 89.75 89.5 89.25 ... -89.5 -89.75 -90.0
expver int32 1
* time (time) datetime64[ns] 1979-01-01 1980-01-01 ... 2019-01-01
Data variables:
z (time, latitude, longitude) float32 50517.914 ... 49769.473
Attributes:
Conventions: CF-1.6
history: 2020-03-02 12:47:40 GMT by grib_to_netcdf-2.16.0: /opt/ecmw...
Run Code Online (Sandbox Code Playgroud)
我想得到沿纬度和经度维度的 z 值的平均值。
我尝试使用此代码:
df.mean(axis = 0)
但它正在删除时间坐标,并返回给我这样的东西。
Dimensions: (latitude: …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 combine_by_coords 组合两个空间 xarray 数据集。这两个数据集是彼此相邻的两个图块。所以有重叠的坐标。在重叠区域中,其中一个数据集的变量值为 nan。
我使用了带有 compat='no_conflicts' 选项的“combine_by_coords”。但是,它返回沿维度 y错误的单调全局索引。看起来它以前是一个问题,但已修复(此处)。所以我真的不知道为什么我会收到这个错误。这是一个示例(netcdf 磁贴在这里):
import xarray as xr
print(xr.__version__)
>>>0.15.1
ds1=xr.open_dataset('Tile1.nc')
ds2=xr.open_dataset('Tile2.nc')
ds = xr.combine_by_coords([ds1,ds2], compat='no_conflicts')
>>>...
ValueError: Resulting object does not have monotonic global indexes along dimension y
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在尝试使用 xarray 打开 .netcdf 文件,但它显示此错误。我无法解决此错误,并且没有找到解决此错误的解决方案。我尝试过不同版本的 Anaconda 和 Ubuntu,但问题仍然存在。
ValueError:在 xarray 当前安装的 IO 后端 ['scipy'] 中找不到匹配项。
engine考虑通过xarray.open_dataset() 的参数 明确选择已安装的后端之一,或安装其他 IO 依赖项: http: //xarray.pydata.org/en/stable/getting-started-guide/installing.html http://xarray.pydata.org/en/stable/getting-started-guide/installing.html http://xarray.pydata.org/en/stable/getting-started-guide/installing.html /xarray.pydata.org/en/stable/user-guide/io.html
我正在使用xarray. 组合多个 netcdf 文件xarray.open_mfdataset。但是我在运行命令时收到错误,下面是命令和错误。
nc_all = xarray.open_mfdataset(files,combine = 'nested', concat_dim="time")
files = glob.glob("/filepath/*")
Run Code Online (Sandbox Code Playgroud)
我收到以下错误 -
Traceback (most recent call last):
File "/home/lsrathore/GLEAM/GLEAM_HPC.py", line 85, in <module>
nc_1980_90 = xarray.open_mfdataset(files[1:11],combine = 'nested', concat_dim="time")
File "/home/lsrathore/.local/lib/python3.9/site-packages/xarray/backends/api.py", line 1038, in open_mfdataset
datasets = [open_(p, **open_kwargs) for p in paths]
File "/home/lsrathore/.local/lib/python3.9/site-packages/xarray/backends/api.py", line 1038, in <listcomp>
datasets = [open_(p, **open_kwargs) for p in paths]
File "/home/lsrathore/.local/lib/python3.9/site-packages/xarray/backends/api.py", line 572, in open_dataset
ds = _dataset_from_backend_dataset(
File "/home/lsrathore/.local/lib/python3.9/site-packages/xarray/backends/api.py", line 367, in _dataset_from_backend_dataset
ds …Run Code Online (Sandbox Code Playgroud)