Skip to content

Commit 3c1e0da

Browse files
committed
Allow add_categories() to accept Series/np.array
1 parent 529cd3d commit 3c1e0da

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

doc/source/whatsnew/v0.16.1.txt

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ Enhancements
5555
- Allow Panel.shift with ``axis='items'`` (:issue:`9890`)
5656

5757
- Trying to write an excel file now raises ``NotImplementedError`` if the ``DataFrame`` has a ``MultiIndex`` instead of writing a broken Excel file. (:issue:`9794`)
58+
- Allow ``Categorical.add_categories`` to accept `Series` or `np.array`. (:issue:`9927`)
5859

5960
.. _whatsnew_0161.api:
6061

pandas/core/categorical.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -684,10 +684,11 @@ def add_categories(self, new_categories, inplace=False):
684684
if not is_list_like(new_categories):
685685
new_categories = [new_categories]
686686
already_included = set(new_categories) & set(self._categories)
687+
687688
if len(already_included) != 0:
688689
msg = "new categories must not include old categories: %s" % str(already_included)
689690
raise ValueError(msg)
690-
new_categories = list(self._categories) + (new_categories)
691+
new_categories = list(self._categories) + list(new_categories)
691692
new_categories = self._validate_categories(new_categories)
692693
cat = self if inplace else self.copy()
693694
cat._categories = new_categories

pandas/tests/test_categorical.py

+13
Original file line numberDiff line numberDiff line change
@@ -727,6 +727,19 @@ def f():
727727
cat.add_categories(["d"])
728728
self.assertRaises(ValueError, f)
729729

730+
# GH 9927
731+
cat = Categorical(list("abc"), ordered=True)
732+
expected = Categorical(list("abc"), categories=list("abcde"), ordered=True)
733+
# test with Series, np.array, index, list
734+
res = cat.add_categories(Series(["d", "e"]))
735+
self.assert_categorical_equal(res, expected)
736+
res = cat.add_categories(np.array(["d", "e"]))
737+
self.assert_categorical_equal(res, expected)
738+
res = cat.add_categories(Index(["d", "e"]))
739+
self.assert_categorical_equal(res, expected)
740+
res = cat.add_categories(["d", "e"])
741+
self.assert_categorical_equal(res, expected)
742+
730743
def test_remove_categories(self):
731744
cat = Categorical(["a","b","c","a"], ordered=True)
732745
old = cat.copy()

0 commit comments

Comments
 (0)