Skip to content

Commit 3f0c4bd

Browse files
committed
rename dataset.apply to dataset.map, deprecating apply
1 parent 164ce9b commit 3f0c4bd

File tree

2 files changed

+37
-16
lines changed

2 files changed

+37
-16
lines changed

xarray/core/dataset.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4088,14 +4088,14 @@ def reduce(
40884088
variables, coord_names=coord_names, attrs=attrs, indexes=indexes
40894089
)
40904090

4091-
def apply(
4091+
def map(
40924092
self,
40934093
func: Callable,
40944094
keep_attrs: bool = None,
40954095
args: Iterable[Any] = (),
40964096
**kwargs: Any,
40974097
) -> "Dataset":
4098-
"""Apply a function over the data variables in this dataset.
4098+
"""Apply a function over each data variable in this dataset.
40994099
41004100
Parameters
41014101
----------
@@ -4128,7 +4128,7 @@ def apply(
41284128
Data variables:
41294129
foo (dim_0, dim_1) float64 -0.3751 -1.951 -1.945 0.2948 0.711 -0.3948
41304130
bar (x) int64 -1 2
4131-
>>> ds.apply(np.fabs)
4131+
>>> ds.map(np.fabs)
41324132
<xarray.Dataset>
41334133
Dimensions: (dim_0: 2, dim_1: 3, x: 2)
41344134
Dimensions without coordinates: dim_0, dim_1, x
@@ -4145,6 +4145,20 @@ def apply(
41454145
attrs = self.attrs if keep_attrs else None
41464146
return type(self)(variables, attrs=attrs)
41474147

4148+
def apply(
4149+
self,
4150+
func: Callable,
4151+
keep_attrs: bool = None,
4152+
args: Iterable[Any] = (),
4153+
**kwargs: Any,
4154+
) -> "Dataset":
4155+
warnings.warn(
4156+
"Dataset.apply is deprecated in favor of Dataset.map and will be removed in a future version of xarray",
4157+
DeprecationWarning,
4158+
stacklevel=2,
4159+
)
4160+
return self.map(func, keep_attrs, args, **kwargs)
4161+
41484162
def assign(
41494163
self, variables: Mapping[Hashable, Any] = None, **variables_kwargs: Hashable
41504164
) -> "Dataset":

xarray/tests/test_dataset.py

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4494,29 +4494,36 @@ def test_count(self):
44944494
actual = ds.count()
44954495
assert_identical(expected, actual)
44964496

4497-
def test_apply(self):
4497+
def test_map(self):
44984498
data = create_test_data()
44994499
data.attrs["foo"] = "bar"
45004500

4501-
assert_identical(data.apply(np.mean), data.mean())
4501+
assert_identical(data.map(np.mean), data.mean())
45024502

45034503
expected = data.mean(keep_attrs=True)
4504-
actual = data.apply(lambda x: x.mean(keep_attrs=True), keep_attrs=True)
4504+
actual = data.map(lambda x: x.mean(keep_attrs=True), keep_attrs=True)
45054505
assert_identical(expected, actual)
45064506

4507-
assert_identical(data.apply(lambda x: x, keep_attrs=True), data.drop("time"))
4507+
assert_identical(data.map(lambda x: x, keep_attrs=True), data.drop("time"))
45084508

45094509
def scale(x, multiple=1):
45104510
return multiple * x
45114511

4512-
actual = data.apply(scale, multiple=2)
4512+
actual = data.map(scale, multiple=2)
45134513
assert_equal(actual["var1"], 2 * data["var1"])
45144514
assert_identical(actual["numbers"], data["numbers"])
45154515

4516-
actual = data.apply(np.asarray)
4516+
actual = data.map(np.asarray)
45174517
expected = data.drop("time") # time is not used on a data var
45184518
assert_equal(expected, actual)
45194519

4520+
def test_apply_deprecated_map(self):
4521+
data = create_test_data()
4522+
data.attrs["foo"] = "bar"
4523+
4524+
with pytest.warns(DeprecationWarning):
4525+
assert_identical(data.map(np.mean), data.mean())
4526+
45204527
def make_example_math_dataset(self):
45214528
variables = {
45224529
"bar": ("x", np.arange(100, 400, 100)),
@@ -4543,15 +4550,15 @@ def test_dataset_number_math(self):
45434550
def test_unary_ops(self):
45444551
ds = self.make_example_math_dataset()
45454552

4546-
assert_identical(ds.apply(abs), abs(ds))
4547-
assert_identical(ds.apply(lambda x: x + 4), ds + 4)
4553+
assert_identical(ds.map(abs), abs(ds))
4554+
assert_identical(ds.map(lambda x: x + 4), ds + 4)
45484555

45494556
for func in [
45504557
lambda x: x.isnull(),
45514558
lambda x: x.round(),
45524559
lambda x: x.astype(int),
45534560
]:
4554-
assert_identical(ds.apply(func), func(ds))
4561+
assert_identical(ds.map(func), func(ds))
45554562

45564563
assert_identical(ds.isnull(), ~ds.notnull())
45574564

@@ -4564,7 +4571,7 @@ def test_unary_ops(self):
45644571
def test_dataset_array_math(self):
45654572
ds = self.make_example_math_dataset()
45664573

4567-
expected = ds.apply(lambda x: x - ds["foo"])
4574+
expected = ds.map(lambda x: x - ds["foo"])
45684575
assert_identical(expected, ds - ds["foo"])
45694576
assert_identical(expected, -ds["foo"] + ds)
45704577
assert_identical(expected, ds - ds["foo"].variable)
@@ -4573,7 +4580,7 @@ def test_dataset_array_math(self):
45734580
actual -= ds["foo"]
45744581
assert_identical(expected, actual)
45754582

4576-
expected = ds.apply(lambda x: x + ds["bar"])
4583+
expected = ds.map(lambda x: x + ds["bar"])
45774584
assert_identical(expected, ds + ds["bar"])
45784585
actual = ds.copy(deep=True)
45794586
actual += ds["bar"]
@@ -4589,7 +4596,7 @@ def test_dataset_dataset_math(self):
45894596
assert_identical(ds, ds + 0 * ds)
45904597
assert_identical(ds, ds + {"foo": 0, "bar": 0})
45914598

4592-
expected = ds.apply(lambda x: 2 * x)
4599+
expected = ds.map(lambda x: 2 * x)
45934600
assert_identical(expected, 2 * ds)
45944601
assert_identical(expected, ds + ds)
45954602
assert_identical(expected, ds + ds.data_vars)
@@ -4686,7 +4693,7 @@ def test_dataset_transpose(self):
46864693
assert_identical(expected, actual)
46874694

46884695
actual = ds.transpose("x", "y")
4689-
expected = ds.apply(lambda x: x.transpose("x", "y", transpose_coords=True))
4696+
expected = ds.map(lambda x: x.transpose("x", "y", transpose_coords=True))
46904697
assert_identical(expected, actual)
46914698

46924699
ds = create_test_data()

0 commit comments

Comments
 (0)