Skip to content

Commit dc95ef6

Browse files
ellequelleMateusz Górski
authored and
Mateusz Górski
committed
Bug fix GH 29624: calling str.isalpha on empty series returns object dtype, not bool (pandas-dev#29680)
1 parent 8b7a83d commit dc95ef6

File tree

3 files changed

+21
-10
lines changed

3 files changed

+21
-10
lines changed

doc/source/whatsnew/v1.0.0.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ Conversion
355355
Strings
356356
^^^^^^^
357357

358-
-
358+
- Calling :meth:`Series.str.isalnum` (and other "ismethods") on an empty Series would return an object dtype instead of bool (:issue:`29624`)
359359
-
360360

361361

pandas/core/strings.py

+10
Original file line numberDiff line numberDiff line change
@@ -3401,59 +3401,69 @@ def rindex(self, sub, start=0, end=None):
34013401
_doc_args["istitle"] = dict(type="titlecase", method="istitle")
34023402
_doc_args["isnumeric"] = dict(type="numeric", method="isnumeric")
34033403
_doc_args["isdecimal"] = dict(type="decimal", method="isdecimal")
3404+
# force _noarg_wrapper return type with dtype=bool (GH 29624)
34043405
isalnum = _noarg_wrapper(
34053406
lambda x: x.isalnum(),
34063407
name="isalnum",
34073408
docstring=_shared_docs["ismethods"] % _doc_args["isalnum"],
34083409
returns_string=False,
3410+
dtype=bool,
34093411
)
34103412
isalpha = _noarg_wrapper(
34113413
lambda x: x.isalpha(),
34123414
name="isalpha",
34133415
docstring=_shared_docs["ismethods"] % _doc_args["isalpha"],
34143416
returns_string=False,
3417+
dtype=bool,
34153418
)
34163419
isdigit = _noarg_wrapper(
34173420
lambda x: x.isdigit(),
34183421
name="isdigit",
34193422
docstring=_shared_docs["ismethods"] % _doc_args["isdigit"],
34203423
returns_string=False,
3424+
dtype=bool,
34213425
)
34223426
isspace = _noarg_wrapper(
34233427
lambda x: x.isspace(),
34243428
name="isspace",
34253429
docstring=_shared_docs["ismethods"] % _doc_args["isspace"],
34263430
returns_string=False,
3431+
dtype=bool,
34273432
)
34283433
islower = _noarg_wrapper(
34293434
lambda x: x.islower(),
34303435
name="islower",
34313436
docstring=_shared_docs["ismethods"] % _doc_args["islower"],
34323437
returns_string=False,
3438+
dtype=bool,
34333439
)
34343440
isupper = _noarg_wrapper(
34353441
lambda x: x.isupper(),
34363442
name="isupper",
34373443
docstring=_shared_docs["ismethods"] % _doc_args["isupper"],
34383444
returns_string=False,
3445+
dtype=bool,
34393446
)
34403447
istitle = _noarg_wrapper(
34413448
lambda x: x.istitle(),
34423449
name="istitle",
34433450
docstring=_shared_docs["ismethods"] % _doc_args["istitle"],
34443451
returns_string=False,
3452+
dtype=bool,
34453453
)
34463454
isnumeric = _noarg_wrapper(
34473455
lambda x: x.isnumeric(),
34483456
name="isnumeric",
34493457
docstring=_shared_docs["ismethods"] % _doc_args["isnumeric"],
34503458
returns_string=False,
3459+
dtype=bool,
34513460
)
34523461
isdecimal = _noarg_wrapper(
34533462
lambda x: x.isdecimal(),
34543463
name="isdecimal",
34553464
docstring=_shared_docs["ismethods"] % _doc_args["isdecimal"],
34563465
returns_string=False,
3466+
dtype=bool,
34573467
)
34583468

34593469
@classmethod

pandas/tests/test_strings.py

+10-9
Original file line numberDiff line numberDiff line change
@@ -1853,15 +1853,16 @@ def test_empty_str_methods(self):
18531853
tm.assert_series_equal(empty_str, empty.str.get(0))
18541854
tm.assert_series_equal(empty_str, empty_bytes.str.decode("ascii"))
18551855
tm.assert_series_equal(empty_bytes, empty.str.encode("ascii"))
1856-
tm.assert_series_equal(empty_str, empty.str.isalnum())
1857-
tm.assert_series_equal(empty_str, empty.str.isalpha())
1858-
tm.assert_series_equal(empty_str, empty.str.isdigit())
1859-
tm.assert_series_equal(empty_str, empty.str.isspace())
1860-
tm.assert_series_equal(empty_str, empty.str.islower())
1861-
tm.assert_series_equal(empty_str, empty.str.isupper())
1862-
tm.assert_series_equal(empty_str, empty.str.istitle())
1863-
tm.assert_series_equal(empty_str, empty.str.isnumeric())
1864-
tm.assert_series_equal(empty_str, empty.str.isdecimal())
1856+
# ismethods should always return boolean (GH 29624)
1857+
tm.assert_series_equal(empty_bool, empty.str.isalnum())
1858+
tm.assert_series_equal(empty_bool, empty.str.isalpha())
1859+
tm.assert_series_equal(empty_bool, empty.str.isdigit())
1860+
tm.assert_series_equal(empty_bool, empty.str.isspace())
1861+
tm.assert_series_equal(empty_bool, empty.str.islower())
1862+
tm.assert_series_equal(empty_bool, empty.str.isupper())
1863+
tm.assert_series_equal(empty_bool, empty.str.istitle())
1864+
tm.assert_series_equal(empty_bool, empty.str.isnumeric())
1865+
tm.assert_series_equal(empty_bool, empty.str.isdecimal())
18651866
tm.assert_series_equal(empty_str, empty.str.capitalize())
18661867
tm.assert_series_equal(empty_str, empty.str.swapcase())
18671868
tm.assert_series_equal(empty_str, empty.str.normalize("NFC"))

0 commit comments

Comments
 (0)