Learning Objectives
Handle missing values
Setting missing values
Replacing values
Review
Editing Rasters and Remotely Sensed Data#
Masking Out Certain Values#
The xarray.DataArray.where
function masks data by setting nans, as demonstrated by the example below.
import geowombat as gw
from geowombat.data import l8_224078_20200518
# Zeros are replaced with nans
with gw.open(l8_224078_20200518) as src:
data = src.where(src != 0)
/home/mmann1123/miniconda3/envs/pygis/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
from .autonotebook import tqdm as notebook_tqdm
Setting ‘no data’ Values#
Setting missing data values, when not available in the raster profile, can be done using the configuration manager or as an argument in the open
command.
import geowombat as gw
from geowombat.data import l8_224078_20200518
# Zeros are replaced with nans
with gw.open(l8_224078_20200518, nodata=0) as src:
print('gw.open: ',src.attrs['nodatavals'])
# replace 0 with nan
src=src.gw.mask_nodata()
# Zeros are replaced with nans
with gw.config.update(nodata=0):
with gw.open(l8_224078_20200518) as src:
print('gw.config',src.attrs['nodatavals'])
# replace 0 with nan
src=src.gw.mask_nodata()
gw.open: (0, 0, 0)
gw.config (0, 0, 0)
Rescaling Values#
Most remotely sensed data is stored as int
to minimize space. We are often left to rescale the values back to floating point on the backend. This can be done in a few ways in geowombat. If the sensor you are using has a geowombat profile, please use that - refer to configuration manager docs. If it is not natively supported we can manually set the scaling factor using the gw.config.update
import geowombat as gw
from geowombat.data import l8_224078_20200518
# Zeros are replaced with nans
with gw.config.update(scale_factor=0.0001):
with gw.open(l8_224078_20200518) as src:
print(src.gw.scale_factor)
0.0001
Replace values#
The GeoWombat replace
function mimics pandas.DataFrame.replace
.
import geowombat as gw
from geowombat.data import l8_224078_20200518
# Replace 1 with 10
with gw.open(l8_224078_20200518) as src:
data = src.gw.replace({1: 10})
Note
The replace
function is typically used with categorical data.
Updating Values#
Geowombat also accepts normal mathematical expressions such as multiplication and addition:
import geowombat as gw
from geowombat.data import l8_224078_20200518
# Replace 1 with 10
with gw.open(l8_224078_20200518) as src:
data = src * 0.001 +80
print(data[0].values)
[[80. 80. 80. ... 80. 80. 80. ]
[80. 80. 80. ... 80. 80. 80. ]
[80. 80. 80. ... 80. 80. 80. ]
...
[87.692 87.518 87.513 ... 87.44 87.432 87.415]
[87.586 87.59 87.61 ... 87.44 87.411 87.425]
[87.576 87.743 87.77 ... 87.464 87.443 87.406]]