在python的netCDF文件中提取特定lat/lng上的感应日期/时间

在python的netCDF文件中提取特定lat/lng上的感应日期/时间,python,datetime,latitude-longitude,netcdf,Python,Datetime,Latitude Longitude,Netcdf,我目前正在使用python处理多个netCDF文件。我正在大伦敦上空使用Sentinel-5P NO2对流层柱。我想将各个文件绘制为一个时间序列,标题为每个线束的伦敦逾越节时间,但我不确定如何提取该时间序列 是否有一种简单的方法可以提取每个文件在特定lat/lng上的卫星通过时间 编辑: 关于这些文件的更多信息。它们是netCDF文件,意味着它们包含维度、变量、属性和坐标。它们包含伦敦上空NO2垂直柱密度的信息,空间分辨率为3.5x7km。我已经用PyCharm中的xarray打开了这些文件,并

我目前正在使用python处理多个netCDF文件。我正在大伦敦上空使用Sentinel-5P NO2对流层柱。我想将各个文件绘制为一个时间序列,标题为每个线束的伦敦逾越节时间,但我不确定如何提取该时间序列

是否有一种简单的方法可以提取每个文件在特定lat/lng上的卫星通过时间

编辑: 关于这些文件的更多信息。它们是netCDF文件,意味着它们包含维度、变量、属性和坐标。它们包含伦敦上空NO2垂直柱密度的信息,空间分辨率为3.5x7km。我已经用PyCharm中的xarray打开了这些文件,并进一步附上了一张图片,以提供有关变量的更多信息

当纬度=51.2或51.8时,我需要找到delta_时间的值。下面是我到目前为止开发的,但是我有大约50个文件,所有文件都超过100000像素,所以这是非常非常慢的。有人知道我该如何改进吗


    for i in file_list:

        # Open product - GROUP PRODUCT
        with xr.open_dataset(i, group='PRODUCT') as file:
            print(colored('\nPRODUCT Group:\n', 'blue'), file)

        no2 = file['nitrogendioxide_tropospheric_column'][0]

        for row in no2.coords['latitude']:
            for cell in row:
                if cell == 51.2 or cell == 51.8:
                    print(cell)
                    print(cell['scanline'])
                    scanpoint = (cell['scanline'])
                    scantime = no2['delta_time'].sel(scanline=scanpoint)
                    print(scantime)
                    return scantime
            else:
                continue

您应该能够使用矢量化的NumPy函数来执行您想要的操作。现在,我不太确定如何比较浮点数的相等性,但这应该和你的类似。我没有特别使用xarray,但使用了netCDF4,所以这里说的
是指为该变量/坐标获取numpy(或等效)数组。另外,请注意,我没有选择一个单独的时间值,就像您选择的那样,我只是使用了整个
纬度
s的3D数组

将numpy导入为np
纬度=
增量时间=
#具有所需条件的三维布尔数组
条件=(纬度==51.2)|(纬度==51.8)
#展开索引元组,3个dim各一个,但忽略地面像素dim
#每个idx阵列都是1D
时间_idx,扫描线_idx,u=condition.nonzero()
#使用时间和扫描线索引获取1D delta_时间数组
增量时间=增量时间[时间idx,扫描线idx]
这将为您提供所有三维中所有相关单元格的坐标(
condition.nonzero()
),以及这些单元格的
delta_时间


请注意,如果不使用实际值,并且只关心纬度和时间差,则不需要实际的no2数组,但始终可以使用类似no2[条件]的值获取相关单元格的值

只有提供有关文件的一些基本信息,才能提供解决方案。示例:时间和空间分辨率非常重要。感谢您的回复!我已经修改了我的代码,使之与你的代码相似,我理解它的概念。但是,当我运行它时,它运行时没有任何错误,但是time_idx和scanline_idx数组是空的,因此delta_time数组也是空的。你知道我该怎么做吗?我终于成功了!数组是emtpy,因为condition语句生成的数组完全由假值组成,但当我将其更改为
condition=(latitude>=51.2)和(latitude)时