Skip to content

Commit 5f89597

Browse files
topper-123jreback
authored andcommitted
CLN: use codes rather than values internally in Categorical (#22547)
1 parent 7947e32 commit 5f89597

File tree

2 files changed

+13
-17
lines changed

2 files changed

+13
-17
lines changed

pandas/core/arrays/categorical.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1736,15 +1736,15 @@ def fillna(self, value=None, method=None, limit=None):
17361736
raise NotImplementedError("specifying a limit for fillna has not "
17371737
"been implemented yet")
17381738

1739-
values = self._codes
1739+
codes = self._codes
17401740

17411741
# pad / bfill
17421742
if method is not None:
17431743

17441744
values = self.to_dense().reshape(-1, len(self))
17451745
values = interpolate_2d(values, method, 0, None,
17461746
value).astype(self.categories.dtype)[0]
1747-
values = _get_codes_for_values(values, self.categories)
1747+
codes = _get_codes_for_values(values, self.categories)
17481748

17491749
else:
17501750

@@ -1756,27 +1756,27 @@ def fillna(self, value=None, method=None, limit=None):
17561756

17571757
values_codes = _get_codes_for_values(value, self.categories)
17581758
indexer = np.where(values_codes != -1)
1759-
values[indexer] = values_codes[values_codes != -1]
1759+
codes[indexer] = values_codes[values_codes != -1]
17601760

17611761
# If value is not a dict or Series it should be a scalar
17621762
elif is_hashable(value):
17631763
if not isna(value) and value not in self.categories:
17641764
raise ValueError("fill value must be in categories")
17651765

1766-
mask = values == -1
1766+
mask = codes == -1
17671767
if mask.any():
1768-
values = values.copy()
1768+
codes = codes.copy()
17691769
if isna(value):
1770-
values[mask] = -1
1770+
codes[mask] = -1
17711771
else:
1772-
values[mask] = self.categories.get_loc(value)
1772+
codes[mask] = self.categories.get_loc(value)
17731773

17741774
else:
17751775
raise TypeError('"value" parameter must be a scalar, dict '
17761776
'or Series, but you passed a '
17771777
'"{0}"'.format(type(value).__name__))
17781778

1779-
return self._constructor(values, dtype=self.dtype, fastpath=True)
1779+
return self._constructor(codes, dtype=self.dtype, fastpath=True)
17801780

17811781
def take_nd(self, indexer, allow_fill=None, fill_value=None):
17821782
"""
@@ -2148,14 +2148,12 @@ def mode(self, dropna=True):
21482148
"""
21492149

21502150
import pandas._libs.hashtable as htable
2151-
values = self._codes
2151+
codes = self._codes
21522152
if dropna:
21532153
good = self._codes != -1
2154-
values = self._codes[good]
2155-
values = sorted(htable.mode_int64(ensure_int64(values), dropna))
2156-
result = self._constructor(values=values, dtype=self.dtype,
2157-
fastpath=True)
2158-
return result
2154+
codes = self._codes[good]
2155+
codes = sorted(htable.mode_int64(ensure_int64(codes), dropna))
2156+
return self._constructor(values=codes, dtype=self.dtype, fastpath=True)
21592157

21602158
def unique(self):
21612159
"""

pandas/core/indexes/category.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -460,9 +460,7 @@ def where(self, cond, other=None):
460460
other = self._na_value
461461
values = np.where(cond, self.values, other)
462462

463-
cat = Categorical(values,
464-
categories=self.categories,
465-
ordered=self.ordered)
463+
cat = Categorical(values, dtype=self.dtype)
466464
return self._shallow_copy(cat, **self._get_attributes_dict())
467465

468466
def reindex(self, target, method=None, level=None, limit=None,

0 commit comments

Comments
 (0)