diff --git a/doc/users/whats_new/cbook.rst b/doc/users/whats_new/cbook.rst new file mode 100644 index 000000000000..4a87f637dc67 --- /dev/null +++ b/doc/users/whats_new/cbook.rst @@ -0,0 +1,16 @@ +cbook.is_sequence_of_strings recognizes string objects +`````````````````````````````````````````````````````` + +This is primarily how pandas stores a sequence of strings. + + >>> import pandas as pd + >>> import matplotilb.cbook as cbook + >>> a = np.array(['a', 'b', 'c']) + >>> cbook.sequence_of_strings(a) + False + >>> a = np.array(['a', 'b', 'c'], dtype=object) + >>> cbook.sequence_of_strings(a) + True + >>> s = pd.Series(['a', 'b', 'c])] + >>> cbook.sequence_of_strings(s) + True diff --git a/lib/matplotlib/cbook.py b/lib/matplotlib/cbook.py index 33e9b876138c..79aca1ca934b 100644 --- a/lib/matplotlib/cbook.py +++ b/lib/matplotlib/cbook.py @@ -783,7 +783,7 @@ def is_sequence_of_strings(obj): """ if not iterable(obj): return False - if is_string_like(obj): + if is_string_like(obj) and not isinstance(obj, np.ndarray): return False for o in obj: if not is_string_like(o): diff --git a/lib/matplotlib/tests/test_cbook.py b/lib/matplotlib/tests/test_cbook.py index 0965a3d18066..a5d63bf9d759 100644 --- a/lib/matplotlib/tests/test_cbook.py +++ b/lib/matplotlib/tests/test_cbook.py @@ -26,6 +26,23 @@ def test_is_string_like(): assert cbook.is_string_like("hello world") assert_equal(cbook.is_string_like(10), False) + y = ['a', 'b', 'c'] + assert_equal(cbook.is_string_like(y), False) + + y = np.array(y) + assert_equal(cbook.is_string_like(y), False) + + y = np.array(y, dtype=object) + assert cbook.is_string_like(y) + + +def test_is_sequence_of_strings(): + y = ['a', 'b', 'c'] + assert cbook.is_sequence_of_strings(y) + + y = np.array(y, dtype=object) + assert cbook.is_sequence_of_strings(y) + def test_restrict_dict(): d = {'foo': 'bar', 1: 2}