Python 使用 xarray 从 NETCDF 文件中提取多个纬度/经度

2023-12-22

我有一个 NC 文件(时间、纬度、经度)从这里下载 https://filebin.net/e3f1n1tl82dosq1w/example.nc?t=z86058ad我正在尝试提取多个站点的时间序列(纬度/经度点从这里下载 https://filebin.net/e3f1n1tl82dosq1w/stations.csv?t=5h1xw4i9)。 所以我尝试用这种方式读取坐标并从 NC 文件中提取最接近的值:

import pandas as pd
import xarray as xr
nc_file = r"C:\Users\lab\Desktop\harvey\example.nc"
NC = xr.open_dataset(nc_file)
csv = r"C:\Users\lab\Desktop\harvey\stations.csv"
df = pd.read_csv(csv,delimiter=',')
Newdf = pd.DataFrame([])
# grid point lists
lat = df["Lat"]
lon = df["Lon"]
point_list = zip(lat,lon)
for i, j in point_list:
    dsloc = NC.sel(lat=i,lon=j,method='nearest')
    DT=dsloc.to_dataframe()
    Newdf=Newdf.append(DT,sort=True)

该代码工作正常并返回:

                        EVP     lat      lon
time                                        
2019-01-01 19:00:00  0.0546  40.063  -88.313
2019-01-01 23:00:00  0.0049  40.063  -88.313
2019-01-01 19:00:00  0.0052  41.938  -93.688
2019-01-01 23:00:00  0.0029  41.938  -93.688
2019-01-01 19:00:00  0.0101  52.938 -124.938
2019-01-01 23:00:00  0.0200  52.938 -124.938
2019-01-01 19:00:00  0.1644  39.063  -79.438
2019-01-01 23:00:00 -0.0027  39.063  -79.438

但是,我需要为每个坐标关联站 ID(来自原始纬度/经度文件),如下所示:

  Station-ID       Lat        Lon            time     EVP     lat      lon
0        Bo1  40.00620  -88.29040  1/1/2019 19:00  0.0546  40.063  -88.313
1                                  1/1/2019 23:00  0.0049  40.063  -88.313
2        Br1  41.97490  -93.69060  1/1/2019 19:00  0.0052  41.938  -93.688
3                                  1/1/2019 23:00  0.0029  41.938  -93.688
4        Brw  71.32250 -156.60917  1/1/2019 19:00  0.0101  52.938 -124.938
5                                  1/1/2019 23:00  0.0200  52.938 -124.938
6        CaV  39.06333  -79.42083  1/1/2019 19:00  0.1644  39.063  -79.438
7                                  1/1/2019 23:00 -0.0027  39.063  -79.438

有什么想法如何可以像提供的示例一样合并我的数据框?


如果您在 zip 命令中包含电台名称,然后像这样将 ID 插入 pandas 数据框行(顺便说一句,我无法访问您的 CSV 文件,因此我使用虚拟列表稍微简化了示例),会怎么样? 。

import pandas as pd
import xarray as xr
nc_file = "example.nc"
NC = xr.open_dataset(nc_file)

#dummy locations and station id as I can't access the CSV
lat=[40,42,41]
lon=[-100,-105,-99]
name=["a","b","c"]

Newdf = pd.DataFrame([])

for i,j,id in zip(lat,lon,name):
    dsloc = NC.sel(lat=i,lon=j,method='nearest')
    DT=dsloc.to_dataframe()

    # insert the name with your preferred column title:
    DT.insert(loc=0,column="station",value=id)
    Newdf=Newdf.append(DT,sort=True)

print(Newdf)

这给了我:

                        EVP     lat      lon station
time                                                
2019-01-01 19:00:00  0.0527  39.938  -99.938       a
2019-01-01 23:00:00  0.0232  39.938  -99.938       a
2019-01-01 19:00:00  0.0125  41.938 -104.938       b
2019-01-01 23:00:00  0.0055  41.938 -104.938       b
2019-01-01 19:00:00  0.0527  40.938  -98.938       c
2019-01-01 23:00:00  0.0184  40.938  -98.938       c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 使用 xarray 从 NETCDF 文件中提取多个纬度/经度 的相关文章

随机推荐