Skip to content

Commit 17b9a1a

Browse files
Abby VeCaseyAbby VeCasey
Abby VeCasey
authored and
Abby VeCasey
committed
ascii
1 parent a4ab2fd commit 17b9a1a

File tree

6 files changed

+55
-1
lines changed

6 files changed

+55
-1
lines changed

pandas/core/strings/accessor.py

+44-1
Original file line numberDiff line numberDiff line change
@@ -3385,7 +3385,7 @@ def len(self):
33853385
# cases:
33863386
# upper, lower, title, capitalize, swapcase, casefold
33873387
# boolean:
3388-
# isalpha, isnumeric isalnum isdigit isdecimal isspace islower isupper istitle
3388+
# isalpha, isnumeric isalnum isdigit isdecimal isspace islower isupper istitle isascii
33893389
# _doc_args holds dict of strings to use in substituting casemethod docs
33903390
_doc_args: dict[str, dict[str, str]] = {}
33913391
_doc_args["lower"] = {"type": "lowercase", "method": "lower", "version": ""}
@@ -3465,6 +3465,7 @@ def casefold(self):
34653465
Series.str.isdecimal : Check whether all characters are decimal.
34663466
Series.str.isspace : Check whether all characters are whitespace.
34673467
Series.str.islower : Check whether all characters are lowercase.
3468+
Series.str.isascii : Check whether all characters are ascii.
34683469
Series.str.isupper : Check whether all characters are uppercase.
34693470
Series.str.istitle : Check whether all characters are titlecase.
34703471
@@ -3488,6 +3489,7 @@ def casefold(self):
34883489
Series.str.isdecimal : Check whether all characters are decimal.
34893490
Series.str.isspace : Check whether all characters are whitespace.
34903491
Series.str.islower : Check whether all characters are lowercase.
3492+
Series.str.isascii : Check whether all characters are ascii.
34913493
Series.str.isupper : Check whether all characters are uppercase.
34923494
Series.str.istitle : Check whether all characters are titlecase.
34933495
@@ -3514,6 +3516,7 @@ def casefold(self):
35143516
Series.str.isdecimal : Check whether all characters are decimal.
35153517
Series.str.isspace : Check whether all characters are whitespace.
35163518
Series.str.islower : Check whether all characters are lowercase.
3519+
Series.str.isascii : Check whether all characters are ascii.
35173520
Series.str.isupper : Check whether all characters are uppercase.
35183521
Series.str.istitle : Check whether all characters are titlecase.
35193522
@@ -3546,6 +3549,7 @@ def casefold(self):
35463549
Series.str.isdigit : Check whether all characters are digits.
35473550
Series.str.isspace : Check whether all characters are whitespace.
35483551
Series.str.islower : Check whether all characters are lowercase.
3552+
Series.str.isascii : Check whether all characters are ascii.
35493553
Series.str.isupper : Check whether all characters are uppercase.
35503554
Series.str.istitle : Check whether all characters are titlecase.
35513555
@@ -3571,6 +3575,7 @@ def casefold(self):
35713575
Series.str.isdecimal : Check whether all characters are decimal.
35723576
Series.str.isspace : Check whether all characters are whitespace.
35733577
Series.str.islower : Check whether all characters are lowercase.
3578+
Series.str.isascii : Check whether all characters are ascii.
35743579
Series.str.isupper : Check whether all characters are uppercase.
35753580
Series.str.istitle : Check whether all characters are titlecase.
35763581
@@ -3597,6 +3602,7 @@ def casefold(self):
35973602
Series.str.isdigit : Check whether all characters are digits.
35983603
Series.str.isdecimal : Check whether all characters are decimal.
35993604
Series.str.islower : Check whether all characters are lowercase.
3605+
Series.str.isascii : Check whether all characters are ascii.
36003606
Series.str.isupper : Check whether all characters are uppercase.
36013607
Series.str.istitle : Check whether all characters are titlecase.
36023608
@@ -3619,6 +3625,7 @@ def casefold(self):
36193625
Series.str.isdigit : Check whether all characters are digits.
36203626
Series.str.isdecimal : Check whether all characters are decimal.
36213627
Series.str.isspace : Check whether all characters are whitespace.
3628+
Series.str.isascii : Check whether all characters are ascii.
36223629
Series.str.isupper : Check whether all characters are uppercase.
36233630
Series.str.istitle : Check whether all characters are titlecase.
36243631
@@ -3644,6 +3651,7 @@ def casefold(self):
36443651
Series.str.isdecimal : Check whether all characters are decimal.
36453652
Series.str.isspace : Check whether all characters are whitespace.
36463653
Series.str.islower : Check whether all characters are lowercase.
3654+
Series.str.isascii : Check whether all characters are ascii.
36473655
Series.str.istitle : Check whether all characters are titlecase.
36483656
36493657
Examples
@@ -3667,6 +3675,7 @@ def casefold(self):
36673675
Series.str.isdecimal : Check whether all characters are decimal.
36683676
Series.str.isspace : Check whether all characters are whitespace.
36693677
Series.str.islower : Check whether all characters are lowercase.
3678+
Series.str.isascii : Check whether all characters are ascii.
36703679
Series.str.isupper : Check whether all characters are uppercase.
36713680
36723681
Examples
@@ -3684,11 +3693,40 @@ def casefold(self):
36843693
3 False
36853694
dtype: bool
36863695
"""
3696+
_shared_docs["isascii"] = """
3697+
See Also
3698+
--------
3699+
Series.str.isalpha : Check whether all characters are alphabetic.
3700+
Series.str.isnumeric : Check whether all characters are numeric.
3701+
Series.str.isalnum : Check whether all characters are alphanumeric.
3702+
Series.str.isdigit : Check whether all characters are digits.
3703+
Series.str.isdecimal : Check whether all characters are decimal.
3704+
Series.str.isspace : Check whether all characters are whitespace.
3705+
Series.str.islower : Check whether all characters are lowercase.
3706+
Series.str.istitle : Check whether all characters are titlecase.
3707+
Series.str.isupper : Check whether all characters are uppercase.
3708+
3709+
Examples
3710+
------------
3711+
The ``s5.str.isascii`` method checks for whether all characters are ascii characters,
3712+
which includes digits 0-9, capital and lowercase letters A-Z, and some other
3713+
special characters.
3714+
3715+
>>> s5 = pd.Series(['ö', 'see123', 'hello world', ''])
3716+
>>> s5.str.isascii()
3717+
0 False
3718+
1 True
3719+
2 True
3720+
3 True
3721+
dtype: bool
3722+
"""
3723+
36873724
_doc_args["isalnum"] = {"type": "alphanumeric", "method": "isalnum"}
36883725
_doc_args["isalpha"] = {"type": "alphabetic", "method": "isalpha"}
36893726
_doc_args["isdigit"] = {"type": "digits", "method": "isdigit"}
36903727
_doc_args["isspace"] = {"type": "whitespace", "method": "isspace"}
36913728
_doc_args["islower"] = {"type": "lowercase", "method": "islower"}
3729+
_doc_args["isascii"] = {"type": "ascii", "method": "isascii"}
36923730
_doc_args["isupper"] = {"type": "uppercase", "method": "isupper"}
36933731
_doc_args["istitle"] = {"type": "titlecase", "method": "istitle"}
36943732
_doc_args["isnumeric"] = {"type": "numeric", "method": "isnumeric"}
@@ -3720,6 +3758,11 @@ def casefold(self):
37203758
docstring=_shared_docs["ismethods"] % _doc_args["islower"]
37213759
+ _shared_docs["islower"],
37223760
)
3761+
isascii = _map_and_wrap(
3762+
"isascii",
3763+
docstring=_shared_docs["ismethods"] % _doc_args["isascii"]
3764+
+ _shared_docs["isascii"],
3765+
)
37233766
isupper = _map_and_wrap(
37243767
"isupper",
37253768
docstring=_shared_docs["ismethods"] % _doc_args["isupper"]

pandas/core/strings/base.py

+4
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,10 @@ def _str_isalnum(self):
179179
def _str_isalpha(self):
180180
pass
181181

182+
@abc.abstractmethod
183+
def _str_isascii(self):
184+
pass
185+
182186
@abc.abstractmethod
183187
def _str_isdecimal(self):
184188
pass

pandas/core/strings/object_array.py

+3
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,9 @@ def _str_isalnum(self):
454454

455455
def _str_isalpha(self):
456456
return self._str_map(str.isalpha, dtype="bool")
457+
458+
def _str_isascii(self):
459+
return self._str_map(str.isascii, dtype="bool")
457460

458461
def _str_isdecimal(self):
459462
return self._str_map(str.isdecimal, dtype="bool")

pandas/tests/strings/conftest.py

+1
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
"get_dummies",
6969
"isalnum",
7070
"isalpha",
71+
"isascii",
7172
"isdecimal",
7273
"isdigit",
7374
"islower",

pandas/tests/strings/test_string_array.py

+1
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ def test_string_array_numeric_integer_array(nullable_string_dtype, method, expec
8383
[
8484
("isdigit", [False, None, True]),
8585
("isalpha", [True, None, False]),
86+
("isascii", [True, None, True]),
8687
("isalnum", [True, None, True]),
8788
("isnumeric", [False, None, True]),
8889
],

pandas/tests/strings/test_strings.py

+2
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ def test_empty_str_methods(any_string_dtype):
159159
# ismethods should always return boolean (GH 29624)
160160
tm.assert_series_equal(empty_bool, empty.str.isalnum())
161161
tm.assert_series_equal(empty_bool, empty.str.isalpha())
162+
tm.assert_series_equal(empty_bool, empty.str.isascii())
162163
tm.assert_series_equal(empty_bool, empty.str.isdigit())
163164
tm.assert_series_equal(empty_bool, empty.str.isspace())
164165
tm.assert_series_equal(empty_bool, empty.str.islower())
@@ -177,6 +178,7 @@ def test_empty_str_methods(any_string_dtype):
177178
@pytest.mark.parametrize(
178179
"method, expected",
179180
[
181+
("isascii", [True, True, True, True, True, True, True, True, True, True]),
180182
("isalnum", [True, True, True, True, True, False, True, True, False, False]),
181183
("isalpha", [True, True, True, False, False, False, True, False, False, False]),
182184
(

0 commit comments

Comments
 (0)