我正在使用Python中的.grib文件。
我的目标是创建一个函数,该函数将以纬度和经度为输入,并将检索.grib文件中的所有数据(温度,风...
i我正在使用Python中的.grib文件。
我的目标是创建一个将纬度和经度作为输入的函数网格(即特定的纬度和经度),并将其转换为.csv文件。
在这里我写的代码,但这给了我一个错误。
import xarray as xr
import cfgrib
#Loading the dataset
DATA = xr.open_dataset(data_path, engine='cfgrib')
lat = DATA.latitude
lon = DATA.longitude
#Create dictionnary for latitude
lat_list = [value for value in lat.values.tolist()]
lat_index = list(range(len(lat_list)))
lat_dict = dict(zip(lat_list,lat_index))
#Create dictionnary for longitude
lon_list = [value for value in lon.values.tolist()]
lon_index = list(range(len(lon_list)))
lon_dict = dict(zip(lon_list,lon_index))
def grid_point_data(data, latitude, longitude, csv_path):
#Longitude goes from 50.0 to 25.0 by increment of 0.5
#Latitude goes from -125.0 to -64.0 by increment of 0.25
formated_latitude = min(lat_list, key=lambda x:abs(x-latitude))
formated_longitude = min(lon_list, key=lambda x:abs(x-longitude))
print(formated_latitude,formated_longitude)
index_latitude = lat_dict[formated_latitude]
index_longitude = lon_dict[formated_longitude]
wind_u = data.u[:,:,index_latitude,index_longitude]
wind_v = data.v[:,:,index_latitude,index_longitude]
wind_w = data.w[:,:,index_latitude,index_longitude]
relative_humidity = data.q[:,:,index_latitude,index_longitude]
temperature = data.t[:,:,index_latitude,index_longitude]
df = wind_u.to_dataframe()
df.to_csv(csv_path)
return(f'Data has been transfered to {csv_path})
数据文件的形状如下:
尺寸:(时间:456,isobaricinhpa:37,纬度:101,经度:245)
坐标:
数字INT32 ...
-
时间(时间)DateTime64 [NS] 2015-09-22 ... 2015-10-31T23:00:00:00
step timeDelta64 [ns] ...
-
isobaricinhpa(isobaricinhpa)float64 1e+03 975.0 950.0 ... 3.0 2.0 2.0 1.0
-
纬度(纬度)float64 50.0 49.75 49.5 49.25 ... 25.5 25.25 25.0
-
经度(经度)float64 -125.0 -124.8 -124.5 ... -64.25 -64.0
有效_time(time)datetime64 [ns] ...
数据变量:
问(时间,iSobaricinhpa,纬度,经度)float32 ...
t(时间,isobaricinhpa,纬度,经度)float32 ...
u(时间,isobaricinhpa,纬度,经度)float32 ...
v(时间,iSobaricinhpa,纬度,经度)float32 ...
w(时间,iSobaricinhpa,纬度,经度)float32 ...
属性:
Grib_edition:1
grib_centre:ECMF
Grib_centredescription:欧洲中范围天气预报中心
grib_subcentre:0
约定:CF-1.7
机构:欧洲中等天气预报中心
历史记录:2024-03-11T16:08 GRIB到CDM+CF通过CFGRIB-0.9.1 ...
有趣的是,如果我的文件中只有一个纬度和经度,我可以运行以下代码来创建CSV:
def transfer_grib_to_csv(grib_path, csv_path, month):
ds = xr.open_dataset(grib_path, engine='cfgrib')
df = ds.to_dataframe()
#new_csv_path = f"{csv_path}{month}.csv"
df.to_csv(csv_path, index=True)
print(f"Données transférées avec succès vers {csv_path}")
为我提供了一个具有以下格式的CSV文件:
(顺便说一句,这是我想实现的形状)
文件的形状是:
尺寸:(时间:408,isobaricinhpa:32,纬度:1,经度:1)
坐标:
数字INT32 ...
-
时间(时间)DateTime64 [NS] 2015-09-11 ... 2015-09-30T23:00:00:00
step timeDelta64 [ns] ...
-
isobaricinhpa(isobaricinhpa)float64 875.0 850.0 825.0 ... 3.0 2.0 2.0 1.0
-
纬度(纬度)float64 33.61
-
经度(经度)float64 -84.46
有效_time(time)datetime64 [ns] ...
数据变量:
问(时间,iSobaricinhpa,纬度,经度)float32 ...
crwc(时间,isobaricinhpa,纬度,经度)float32 ...
t(时间,isobaricinhpa,纬度,经度)float32 ...
u(时间,isobaricinhpa,纬度,经度)float32 ...
v(时间,iSobaricinhpa,纬度,经度)float32 ...
w(时间,iSobaricinhpa,纬度,经度)float32 ...
属性:
Grib_edition:1
grib_centre:ECMF
Grib_centredescription:欧洲中范围天气预报中心
grib_subcentre:0
约定:CF-1.7
机构:欧洲中等天气预报中心
历史记录:2024-03-11T16:09 grib to cdm+cf通过CFGRIB-0.9.1 ...
但是第一个功能中的“ wind_u”的形状是:
尺寸:(时间:456,isobaricinhpa:37)
坐标:
数字INT32 ...
-
时间(时间)DateTime64 [NS] 2015-09-22 ... 2015-10-31T23:00:00:00
step timeDelta64 [ns] ...
-
isobaricinhpa(isobaricinhpa)float64 1e+03 975.0 950.0 ... 3.0 2.0 2.0 1.0
Latitude Float64 36.75
经度Float64 -79.25
有效_time(time)datetime64 [ns] ...
数据变量:
u(时间,isobaricinhpa)float32 ...
它不再将纬度和经度指定为维度。
这是我运行时遇到的错误“ grid_point_data(数据,36.6844,-79.295,csv_path)”:
file“ c:\ users \ tberberian3 \ documents \ scripts \ grid_point_data.py”,第108行,in
grid_point_data(数据,36.6844,-79.295,csv_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
文件“ C:\ Users \ Tberberian3 \ Documents \ Scripts \ grid_point_data.py”,第70行,在GRID_POINT_DATA中
df = wind_u.to_dataframe()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^因为
文件“ c:\ user \ tberberian3 \ appdata \ local \ anaconda3 \ enconda3 \ encsosv \ sosev \ lib \ lib \ site-packages \ xarray \ xarray \ core \ core \ dataarray.py.py.py”,第3776行,在to_dataframe中
df = ds._to_dataframe(ordered_dims)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^es》
文件“ C:\ users \ tberberian3 \ appData \ local \ local \ anaconda3 \ envs \ sosev \ sosev \ lib \ lib \ site-packages \ xarray \ xarray \ core \ dataset.py”,第6253行,在_to_dataframe中
数据= [
^
文件“ c:c:\ users \ tberberian3 \ appdata \ local \ anaconda3 \ enconda3 \ envs \ sosev \ sosev \ lib \ lib \ site-packages \ xarray \ xarray \ core \ core \ dataset.py”,第6254行,
self._variobles [k] .set_dims(ordered_dims).values.reshape(-1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
文件“ c:\ user \ tberberian3 \ appdata \ local \ local \ anaconda3 \ envs \ sosenv \ sosev \ lib \ lib \ site-packages \ xarray \ xarray \ core \ core \ variable.py.py,第1721行,in set_dims in set_dims
Expanded_data = self.data
^^^^^^^^^^
文件“ c:\ users \ tberberian3 \ appdata \ local \ anaconda3 \ enconda3 \ envs \ sosev \ lib \ lib \ lib \ site-packages \ xarray \ xarray \ core \ core \ core \ variable.py.py,第435行,在数据中
返回self._data.get_duck_array()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^es》
文件“ c:c:\ user \ tberberian3 \ appdata \ local \ local \ anaconda3 \ envs \ sosenv \ sosev \ lib \ lib \ site-packages \ xarray \ xarray \ core \ core \ indexing.py.py.py.py”,第696行,在get_duck_array in get_duck_array
self._ensure_cached()
文件“ C:\ User \ tberberian3 \ appData \ local \ local \ anaconda3 \ encosev \ sosev \ lib \ lib \ lib \ site-packages \ xarray \ xarray \ core \ core \ indexing.py.py.py”,第690行,in _ensure_cached
self.Array = as_indexable(self.Array.get_duck_array())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^es》
文件“ c:c:\ user \ tberberian3 \ appdata \ local \ local \ anaconda3 \ envs \ sosenv \ sosev \ lib \ lib \ site-packages \ xarray \ xarray \ core \ core \ indexing.py.py.py.py”,第664行,在get_duck_array in get_duck_array
返回self.array.get_duck_array()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^es》
文件“ c:c:\ user \ tberberian3 \ appdata \ local \ local \ anaconda3 \ envs \ sosev \ sosev \ lib \ lib \ site-packages \ xarray \ xarray \ core \ core \ indexing.py.py.py”,第551行,在get_duck_array in get_duck_array
array = self.array [self.key]
~~~~~~~~~~~ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^es
文件“ c:\ users \ tberberian3 \ appdata \ local \ anaconda3 \ enconda \ envs \ sosev \ lib \ lib \ site-packages \ cfgrib \ cfgrib \ xarray_plugin.py”,第155行
返回xr.core.indexing.explitic_indexing_adapter(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
文件“ c:\ user \ tberberian3 \ appdata \ local \ local \ anaconda3 \ envs \ sosev \ sosev \ lib \ lib \ site-packages \ xarray \ xarray \ core \ core \ indexing.py.py”,第858行,在Explicit_indexing_adapter中
结果= raw_indexing_method(raw_key.tuple)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^es》
文件“ C:\ User \ tberberian3 \ appData \ local \ local \ anaconda3 \ envs \ sosenv \ sosev \ lib \ lib \ site-packages \ cfgrib \ cfgrib \ xarray_plugin.py”,第164行,
返回self.array [key]
~~~~~~~~~~ ^^^^^
文件“ c:\ users \ tberberian3 \ appdata \ local \ anaconda3 \ envs \ encosev \ sosev \ lib \ lib \ site-packages \ cfgrib \ dataset.py”,第358行
消息= self.index.get_field(message_ids [0])#类型:忽略
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^es
文件“ c:\ users \ tberberian3 \ appdata \ local \ anaconda3 \ envs \ encosev \ sosev \ lib \ lib \ site-packages \ cfgrib \ cfgrib \ messages.py”,第484行,在get_field
返回computedkeysadapter(self.fieldset [message_id],self.computed_keys)
~~~~~~~~~~~~~~ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^es
文件“ C:\ User \ Tberberian3 \ AppData \ local \ local \ anaconda3 \ envs \ sosenv \ lib \ lib \ site-packages \ cfgrib \ message.py”,第344行,in
get> gettem
返回self.message_from_file(文件,offset = item)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
文件“ C:\ User \ Tberberian3 \ AppData \ local \ local \ anaconda3 \ envs \ sosev \ sosev \ lib \ lib \ site-packages \ cfgrib \ cfgrib \ messages.py”,第340行,在message_from_file中
返回消息。from_file(文件,偏移,** kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
文件“ c:\ users \ tberberian3 \ appdata \ local \ anaconda3 \ envs \ encosev \ sosev \ lib \ lib \ site-packages \ cfgrib \ cfgrib \ messages.py”,第93行,in_file in_file
file.seek(偏移)
OSERROR:[ERRNO 22]无效参数
我还尝试使用wind_u.values.tolist()方法,但它不起作用
非常感谢您的帮助。