最近在处理卫星数据,发现葵花8的云顶温度(cltt)缺测值使用的是-450.8,常用的处理方法是把这些缺测值用NAN替代,方便后续的画图或其它计算。
在https://docs.xarray.dev/en/stable/contributing.html上翻了很久,找到的直接相关的函数是xarray.DataSet.fillna(),用特定的值替换NAN,但我想要的正好相反。
如果是Array,可以直接用下面的代码:
cltt[cltt < -400] = np.nan
当然我可以把nc文件直接读成Array,或者先把DataArray转成DataFrame再转成Array,但为了能直接用xarray.DataSet.plot(),还是有必要略过这些繁杂的步骤,毕竟xarray.DataSet.plot()真的很好用!
import xarray as xr
import numpy as np
cltt = xr.open_dataset('path')['CLTT']
1.直接用xarray.DataSet.plot()画出来的图看不出任何信息:
2.通过设置vmin和vmax,已经能看到有效信息,但缺测的部分会被当成设置的vmin:
3.最重要的一步,方法和Array的思路相同,但写法不一样:
cltt = xr.where(cltt.values > -400, cltt, np.nan)
详细说明在这https://docs.xarray.dev/en/stable/generated/xarray.Dataset.where.html,其中other这个参数原文说明是:Value to use for locations in this object where cond
is False. 意思是用于取代此对象中cond为False的位置的值。
出来的图就是缺测部分为空白,与其它有效信息可以区分:
欢迎补充针对DataArray用NAN填补缺测值的方法。