簡體   English   中英

我有很多 netcdf 文件,如何使用 xarray 將所有文件上傳到一台 python 筆記本中?

[英]I have a lot of netcdf files, how would I use xarray to upload all the files into one python notebook?

我有 12 個 netcdf 文件的 1 個文件夾。 我如何使用 xarray 將所有 netcdf 文件合並到一個數據數組中?

該文件夾代表 2015 年,12 個 netcdf 文件代表 2015 年每個月的數據。

我想也許我可以通過運行 for 循環來嘗試操作字符串並更改字符串中文件的每個編號,因為我的文件是通過以下方式組織的(2015 年):

EN.4.2.1.f.analysis.g10.201501.nc
EN.4.2.1.f.analysis.g10.201502.nc
EN.4.2.1.f.analysis.g10.201503.nc
....

我正在加載一個 netcdf 文件,例如:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import netCDF4 as s
import glob
import xarray as xr
from datetime import datetime

inpath='../../Data/EN.4.2.1_analyses/EN.4.2.1.analyses.g10.2015/'

# just loading in the first month (january) of 2015
en4_2015 = xr.open_dataset(inpath+'EN.4.2.1.f.analysis.g10.201501.nc')

如何將所有 netcdf 文件組合成一個數組而不是 12 個不同的 xarray?

我試過了:

import glob
import xarray as xr
from datetime import datetime

# List all matching files
files = glob.glob(inpath+'*.nc')

# Create list for 
individual_files = []

# Loop through each file in the list
for i in files:
    
    # Load a single dataset
    timestep_ds = xr.open_dataset(i)
    
    # Create a new variable called 'time' from the `time_coverage_start` field, and 
    # convert the string to a datetime object so xarray knows it is time data
    timestep_ds['time'] = datetime.strptime(timestep_ds.time_coverage_start, 
                                           "%Y-%m-%dT%H:%M:%S.%fZ")
    
    # Add the dataset to the list
    individual_files.append(timestep_ds)

# Combine individual datasets into a single xarray along the 'time' dimension
modis_ds = xr.concat(individual_files, dim='time')

print(modis_ds)
AttributeError                            Traceback (most recent call last)
<ipython-input-36-34685efc1691> in <module>
     10     # Create a new variable called 'time' from the `time_coverage_start` field, and
     11     # convert the string to a datetime object so xarray knows it is time data
---> 12     timestep_ds['time'] = datetime.strptime(timestep_ds.time_coverage_start, 
     13                                            "%Y-%m-%dT%H:%M:%S.%fZ")
     14 

~/miniconda3/envs/py3_std_maps/lib/python3.8/site-packages/xarray/core/common.py in __getattr__(self, name)
    226                 with suppress(KeyError):
    227                     return source[name]
--> 228         raise AttributeError(
    229             "{!r} object has no attribute {!r}".format(type(self).__name__, name)
    230         )

AttributeError: 'Dataset' object has no attribute 'time_coverage_start'

輕松修復:使用:

ds = xr.open_mfdataset(file_path_folder...time??/*nc')

時間不是說 2015 年,而是 20 年? 獲取 21 世紀的所有文件,與 19 世紀相同?? 獲取 20 世紀的所有文件等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM