|
28 | 28 |
|
29 | 29 | from pandas.core import algorithms
|
30 | 30 | from pandas.core.accessor import PandasDelegate
|
31 |
| -from pandas.core.arrays import ExtensionArray, ExtensionOpsMixin |
| 31 | +from pandas.core.arrays import ( |
| 32 | + DatetimeArray, |
| 33 | + ExtensionArray, |
| 34 | + ExtensionOpsMixin, |
| 35 | + TimedeltaArray, |
| 36 | +) |
32 | 37 | from pandas.core.arrays.datetimelike import (
|
33 | 38 | DatetimeLikeArrayMixin,
|
34 | 39 | _ensure_datetimelike_to_i8,
|
@@ -251,15 +256,10 @@ def take(self, indices, axis=0, allow_fill=True, fill_value=None, **kwargs):
|
251 | 256 | if isinstance(maybe_slice, slice):
|
252 | 257 | return self[maybe_slice]
|
253 | 258 |
|
254 |
| - taken = ExtensionIndex.take( |
| 259 | + return ExtensionIndex.take( |
255 | 260 | self, indices, axis, allow_fill, fill_value, **kwargs
|
256 | 261 | )
|
257 | 262 |
|
258 |
| - # keep freq in PeriodArray/Index, reset otherwise |
259 |
| - freq = self.freq if is_period_dtype(self) else None |
260 |
| - assert taken.freq == freq, (taken.freq, freq, taken) |
261 |
| - return self._shallow_copy(taken, freq=freq) |
262 |
| - |
263 | 263 | _can_hold_na = True
|
264 | 264 |
|
265 | 265 | _na_value = NaT
|
@@ -486,8 +486,8 @@ def isin(self, values, level=None):
|
486 | 486 | @Appender(_index_shared_docs["repeat"] % _index_doc_kwargs)
|
487 | 487 | def repeat(self, repeats, axis=None):
|
488 | 488 | nv.validate_repeat(tuple(), dict(axis=axis))
|
489 |
| - freq = self.freq if is_period_dtype(self) else None |
490 |
| - return self._shallow_copy(self.asi8.repeat(repeats), freq=freq) |
| 489 | + result = type(self._data)(self.asi8.repeat(repeats), dtype=self.dtype) |
| 490 | + return self._shallow_copy(result) |
491 | 491 |
|
492 | 492 | @Appender(_index_shared_docs["where"] % _index_doc_kwargs)
|
493 | 493 | def where(self, cond, other=None):
|
@@ -650,6 +650,22 @@ def _set_freq(self, freq):
|
650 | 650 |
|
651 | 651 | self._data._freq = freq
|
652 | 652 |
|
| 653 | + def _shallow_copy(self, values=None, **kwargs): |
| 654 | + if values is None: |
| 655 | + values = self._data |
| 656 | + if isinstance(values, type(self)): |
| 657 | + values = values._data |
| 658 | + |
| 659 | + attributes = self._get_attributes_dict() |
| 660 | + |
| 661 | + if "freq" not in kwargs and self.freq is not None: |
| 662 | + if isinstance(values, (DatetimeArray, TimedeltaArray)): |
| 663 | + if values.freq is None: |
| 664 | + del attributes["freq"] |
| 665 | + |
| 666 | + attributes.update(kwargs) |
| 667 | + return self._simple_new(values, **attributes) |
| 668 | + |
653 | 669 | # --------------------------------------------------------------------
|
654 | 670 | # Set Operation Methods
|
655 | 671 |
|
|
0 commit comments