Skip to content

Commit 6d220c7

Browse files
TomAugspurgertm9k1
authored andcommitted
REF: Make PeriodArray an ExtensionArray (pandas-dev#22862)
* WIP: PeriodArray * WIP * remove debug * Just moves * PeriodArray.shift definition * _data type * clean * accessor wip * some more wip * tshift, shift * Arithmetic * repr changes * wip * freq setter * Added disabled ops * copy * Support concat * object ctor * Updates * lint * lint * wip * more wip * array-setitem * wip * wip * Use ._tshift internally for datetimelike ops In preperation for PeriodArray / DatetimeArray / TimedeltaArray. Index.shift has a different meaning from ExtensionArray.shift. - Index.shift pointwise shifts each element by some amount - ExtensionArray.shift shits the *position* of each value in the array padding the end with NA This is going to get confusing. This PR tries to avoid some of that by internally using a new `_tshift` method (time-shift) when we want to do pointwise shifting of each value. Places that know they want that behavior (like in the datetimelike ops) should use that. * deep * Squashed commit of the following: commit 23e5cfc Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 13:10:41 2018 -0500 Use ._tshift internally for datetimelike ops In preperation for PeriodArray / DatetimeArray / TimedeltaArray. Index.shift has a different meaning from ExtensionArray.shift. - Index.shift pointwise shifts each element by some amount - ExtensionArray.shift shits the *position* of each value in the array padding the end with NA This is going to get confusing. This PR tries to avoid some of that by internally using a new `_tshift` method (time-shift) when we want to do pointwise shifting of each value. Places that know they want that behavior (like in the datetimelike ops) should use that. commit 1d9f76c Author: Joris Van den Bossche <[email protected]> Date: Tue Oct 2 17:11:11 2018 +0200 CLN: remove Index._to_embed (pandas-dev#22879) * CLN: remove Index._to_embed * pep8 commit 6247da0 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 08:50:41 2018 -0500 Provide default implementation for `data_repated` (pandas-dev#22935) commit 5ce06b5 Author: Matthew Roeschke <[email protected]> Date: Mon Oct 1 14:22:20 2018 -0700 BUG: to_datetime preserves name of Index argument in the result (pandas-dev#22918) * BUG: to_datetime preserves name of Index argument in the result * correct test * Squashed commit of the following: commit bccfc3f Merge: d65980e 9caf048 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 13:47:48 2018 -0500 Merge remote-tracking branch 'upstream/master' into period-dtype-type commit 9caf048 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 13:25:22 2018 -0500 CI: change windows vm image (pandas-dev#22948) commit d65980e Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 11:46:38 2018 -0500 typo commit e5c61fc Merge: d7a8e1b 1d9f76c Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 10:57:59 2018 -0500 Merge remote-tracking branch 'upstream/master' into period-dtype-type commit d7a8e1b Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 10:57:56 2018 -0500 Fixed commit 598cc62 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 10:32:22 2018 -0500 doc note commit 83db05c Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 10:28:52 2018 -0500 updates commit 1d9f76c Author: Joris Van den Bossche <[email protected]> Date: Tue Oct 2 17:11:11 2018 +0200 CLN: remove Index._to_embed (pandas-dev#22879) * CLN: remove Index._to_embed * pep8 commit 6247da0 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 08:50:41 2018 -0500 Provide default implementation for `data_repated` (pandas-dev#22935) commit f07ab80 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 06:22:27 2018 -0500 str, bytes commit 8a8bdb0 Author: Tom Augspurger <[email protected]> Date: Mon Oct 1 21:40:59 2018 -0500 import at top commit 99bafdd Author: Tom Augspurger <[email protected]> Date: Mon Oct 1 21:38:12 2018 -0500 Update type for PeriodDtype Removed unused IntervalDtypeType commit 5ce06b5 Author: Matthew Roeschke <[email protected]> Date: Mon Oct 1 14:22:20 2018 -0700 BUG: to_datetime preserves name of Index argument in the result (pandas-dev#22918) * BUG: to_datetime preserves name of Index argument in the result * correct test * fixup * The rest of the EA tests * docs * rename to time_shift * Squashed commit of the following: commit 11a0d93 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 14:26:34 2018 -0500 typerror commit a0cd5e7 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 14:25:38 2018 -0500 TypeError for Series commit 2247461 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 13:29:29 2018 -0500 Test op(Series[EA], EA]) commit c9fe5d3 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 13:21:33 2018 -0500 make strict commit 7ef697c Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 13:14:52 2018 -0500 Use super commit 35d4213 Merge: 0671e7d ee80803 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 13:11:05 2018 -0500 Merge remote-tracking branch 'upstream/master' into ea-divmod commit ee80803 Author: Matthew Roeschke <[email protected]> Date: Wed Oct 3 08:25:44 2018 -0700 BUG: Correctly weekly resample over DST (pandas-dev#22941) * test resample fix * move the localization until needed * BUG: Correctly weekly resample over DST * Move whatsnew to new section commit fea27f0 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 08:49:44 2018 -0500 CI: pin moto to 1.3.4 (pandas-dev#22959) commit 15d32bb Author: jbrockmendel <[email protected]> Date: Wed Oct 3 04:32:35 2018 -0700 [CLN] Dispatch (some) Frame ops to Series, avoiding _data.eval (pandas-dev#22019) * avoid casting to object dtype in mixed-type frames * Dispatch to Series ops in _combine_match_columns * comment * docstring * flake8 fixup * dont bother with try_cast_result * revert non-central change * simplify * revert try_cast_results * revert non-central changes * Fixup typo syntaxerror * simplify assertion * use dispatch_to_series in combine_match_columns * Pass unwrapped op where appropriate * catch correct error * whatsnew note * comment * whatsnew section * remove unnecessary tester * doc fixup commit 3e3256b Author: alimcmaster1 <[email protected]> Date: Wed Oct 3 12:23:22 2018 +0100 Allow passing a mask to NanOps (pandas-dev#22865) commit e756e99 Author: jbrockmendel <[email protected]> Date: Wed Oct 3 02:19:27 2018 -0700 CLN: Use is_period_dtype instead of ABCPeriodIndex checks (pandas-dev#22958) commit 03181f0 Author: Wenhuan <[email protected]> Date: Wed Oct 3 15:28:07 2018 +0800 BUG: fix Series(extension array) + extension array values addition (pandas-dev#22479) commit 04ea51d Author: Joris Van den Bossche <[email protected]> Date: Wed Oct 3 09:24:36 2018 +0200 CLN: small clean-up of IntervalIndex (pandas-dev#22956) commit b0f9a10 Author: Tony Tao <[email protected]> Date: Tue Oct 2 19:01:08 2018 -0500 DOC GH22893 Fix docstring of groupby in pandas/core/generic.py (pandas-dev#22920) commit 08ecba8 Author: jbrockmendel <[email protected]> Date: Tue Oct 2 14:22:53 2018 -0700 BUG: fix DataFrame+DataFrame op with timedelta64 dtype (pandas-dev#22696) commit c44bad2 Author: Pamela Wu <[email protected]> Date: Tue Oct 2 17:16:25 2018 -0400 CLN GH22873 Replace base excepts in pandas/core (pandas-dev#22901) commit 8e749a3 Author: Pamela Wu <[email protected]> Date: Tue Oct 2 17:14:48 2018 -0400 CLN GH22874 replace bare excepts in pandas/io/pytables.py (pandas-dev#22919) commit 1102a33 Author: Joris Van den Bossche <[email protected]> Date: Tue Oct 2 22:31:36 2018 +0200 DOC/CLN: clean-up shared_docs in generic.py (pandas-dev#20074) commit 9caf048 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 13:25:22 2018 -0500 CI: change windows vm image (pandas-dev#22948) commit 0671e7d Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 11:10:42 2018 -0500 Fixup commit 1b4261f Merge: c92a4a8 1d9f76c Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 10:58:43 2018 -0500 Merge remote-tracking branch 'upstream/master' into ea-divmod commit 1d9f76c Author: Joris Van den Bossche <[email protected]> Date: Tue Oct 2 17:11:11 2018 +0200 CLN: remove Index._to_embed (pandas-dev#22879) * CLN: remove Index._to_embed * pep8 commit 6247da0 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 08:50:41 2018 -0500 Provide default implementation for `data_repated` (pandas-dev#22935) commit c92a4a8 Author: Tom Augspurger <[email protected]> Date: Mon Oct 1 16:56:15 2018 -0500 Update old test commit 52538fa Author: Tom Augspurger <[email protected]> Date: Mon Oct 1 16:51:48 2018 -0500 BUG: divmod return type commit 5ce06b5 Author: Matthew Roeschke <[email protected]> Date: Mon Oct 1 14:22:20 2018 -0700 BUG: to_datetime preserves name of Index argument in the result (pandas-dev#22918) * BUG: to_datetime preserves name of Index argument in the result * correct test * Squashed commit of the following: commit 7714e79 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 10:13:06 2018 -0500 Always return ndarray commit 1921c6f Merge: 01f7366 fea27f0 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 09:50:30 2018 -0500 Merge remote-tracking branch 'upstream/master' into combine-exception commit fea27f0 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 08:49:44 2018 -0500 CI: pin moto to 1.3.4 (pandas-dev#22959) commit 15d32bb Author: jbrockmendel <[email protected]> Date: Wed Oct 3 04:32:35 2018 -0700 [CLN] Dispatch (some) Frame ops to Series, avoiding _data.eval (pandas-dev#22019) * avoid casting to object dtype in mixed-type frames * Dispatch to Series ops in _combine_match_columns * comment * docstring * flake8 fixup * dont bother with try_cast_result * revert non-central change * simplify * revert try_cast_results * revert non-central changes * Fixup typo syntaxerror * simplify assertion * use dispatch_to_series in combine_match_columns * Pass unwrapped op where appropriate * catch correct error * whatsnew note * comment * whatsnew section * remove unnecessary tester * doc fixup commit 3e3256b Author: alimcmaster1 <[email protected]> Date: Wed Oct 3 12:23:22 2018 +0100 Allow passing a mask to NanOps (pandas-dev#22865) commit e756e99 Author: jbrockmendel <[email protected]> Date: Wed Oct 3 02:19:27 2018 -0700 CLN: Use is_period_dtype instead of ABCPeriodIndex checks (pandas-dev#22958) commit 03181f0 Author: Wenhuan <[email protected]> Date: Wed Oct 3 15:28:07 2018 +0800 BUG: fix Series(extension array) + extension array values addition (pandas-dev#22479) commit 04ea51d Author: Joris Van den Bossche <[email protected]> Date: Wed Oct 3 09:24:36 2018 +0200 CLN: small clean-up of IntervalIndex (pandas-dev#22956) commit b0f9a10 Author: Tony Tao <[email protected]> Date: Tue Oct 2 19:01:08 2018 -0500 DOC GH22893 Fix docstring of groupby in pandas/core/generic.py (pandas-dev#22920) commit 08ecba8 Author: jbrockmendel <[email protected]> Date: Tue Oct 2 14:22:53 2018 -0700 BUG: fix DataFrame+DataFrame op with timedelta64 dtype (pandas-dev#22696) commit c44bad2 Author: Pamela Wu <[email protected]> Date: Tue Oct 2 17:16:25 2018 -0400 CLN GH22873 Replace base excepts in pandas/core (pandas-dev#22901) commit 8e749a3 Author: Pamela Wu <[email protected]> Date: Tue Oct 2 17:14:48 2018 -0400 CLN GH22874 replace bare excepts in pandas/io/pytables.py (pandas-dev#22919) commit 1102a33 Author: Joris Van den Bossche <[email protected]> Date: Tue Oct 2 22:31:36 2018 +0200 DOC/CLN: clean-up shared_docs in generic.py (pandas-dev#20074) commit 01f7366 Merge: 5372134 9caf048 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 13:50:28 2018 -0500 Merge remote-tracking branch 'upstream/master' into combine-exception commit 9caf048 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 13:25:22 2018 -0500 CI: change windows vm image (pandas-dev#22948) commit 5372134 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 11:35:07 2018 -0500 fixed move commit ce1a3c6 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 11:32:11 2018 -0500 fixed move commit b9c7e4b Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 11:28:57 2018 -0500 remove old note commit a4a2933 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 11:24:48 2018 -0500 handle test commit be63feb Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 11:19:17 2018 -0500 move test commit 0eef0cf Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 11:18:18 2018 -0500 move back commit 2183f7b Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 11:17:28 2018 -0500 api commit 85fc5d8 Merge: 9059c0d 1d9f76c Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 11:15:52 2018 -0500 Merge remote-tracking branch 'upstream/master' into combine-exception commit 1d9f76c Author: Joris Van den Bossche <[email protected]> Date: Tue Oct 2 17:11:11 2018 +0200 CLN: remove Index._to_embed (pandas-dev#22879) * CLN: remove Index._to_embed * pep8 commit 6247da0 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 08:50:41 2018 -0500 Provide default implementation for `data_repated` (pandas-dev#22935) commit 9059c0d Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 06:33:15 2018 -0500 Note commit 0c53f08 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 06:30:54 2018 -0500 Imports commit ce94bf9 Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 06:28:16 2018 -0500 Moves commit fdd43c4 Author: Tom Augspurger <[email protected]> Date: Mon Oct 1 21:26:09 2018 -0500 Closes pandas-dev#22850 commit 5ce06b5 Author: Matthew Roeschke <[email protected]> Date: Mon Oct 1 14:22:20 2018 -0700 BUG: to_datetime preserves name of Index argument in the result (pandas-dev#22918) * BUG: to_datetime preserves name of Index argument in the result * correct test * Squashed commit of the following: commit 11a0d93 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 14:26:34 2018 -0500 typerror commit a0cd5e7 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 14:25:38 2018 -0500 TypeError for Series commit 2247461 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 13:29:29 2018 -0500 Test op(Series[EA], EA]) commit c9fe5d3 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 13:21:33 2018 -0500 make strict commit 7ef697c Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 13:14:52 2018 -0500 Use super commit 35d4213 Merge: 0671e7d ee80803 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 13:11:05 2018 -0500 Merge remote-tracking branch 'upstream/master' into ea-divmod commit 0671e7d Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 11:10:42 2018 -0500 Fixup commit 1b4261f Merge: c92a4a8 1d9f76c Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 10:58:43 2018 -0500 Merge remote-tracking branch 'upstream/master' into ea-divmod commit c92a4a8 Author: Tom Augspurger <[email protected]> Date: Mon Oct 1 16:56:15 2018 -0500 Update old test commit 52538fa Author: Tom Augspurger <[email protected]> Date: Mon Oct 1 16:51:48 2018 -0500 BUG: divmod return type * fixed merge conflict * Handle divmod test * extension tests passing * Squashed commit of the following: commit c9d6e89 Author: Tom Augspurger <[email protected]> Date: Thu Oct 4 08:34:22 2018 -0500 xpass -> skip commit 95d5cbf Author: Tom Augspurger <[email protected]> Date: Thu Oct 4 08:22:17 2018 -0500 typo, import commit 4e9b7f0 Author: Tom Augspurger <[email protected]> Date: Thu Oct 4 08:18:40 2018 -0500 doc update commit cc2bfc8 Merge: 11a0d93 fe67b94 Author: Tom Augspurger <[email protected]> Date: Thu Oct 4 08:15:46 2018 -0500 Merge remote-tracking branch 'upstream/master' into ea-divmod commit fe67b94 Author: Tom Augspurger <[email protected]> Date: Thu Oct 4 06:55:09 2018 -0500 Update type for PeriodDtype / DatetimeTZDtype / IntervalDtype (pandas-dev#22938) commit b12e5ba Author: Tom Augspurger <[email protected]> Date: Thu Oct 4 06:30:29 2018 -0500 Safer is dtype (pandas-dev#22975) commit c19c805 Author: Tom Augspurger <[email protected]> Date: Thu Oct 4 06:27:54 2018 -0500 Catch Exception in combine (pandas-dev#22936) commit d553ab3 Author: Anjali2019 <[email protected]> Date: Thu Oct 4 13:24:06 2018 +0200 TST: Fixturize series/test_combine_concat.py (pandas-dev#22964) commit 4c78b97 Author: Anjali2019 <[email protected]> Date: Thu Oct 4 13:23:39 2018 +0200 TST: Fixturize series/test_constructors.py (pandas-dev#22965) commit 45d3bb7 Author: Anjali2019 <[email protected]> Date: Thu Oct 4 13:23:20 2018 +0200 TST: Fixturize series/test_datetime_values.py (pandas-dev#22966) commit f1a22ff Author: Anjali2019 <[email protected]> Date: Thu Oct 4 13:22:21 2018 +0200 TST: Fixturize series/test_dtypes.py (pandas-dev#22967) commit abf68fd Author: Anjali2019 <[email protected]> Date: Thu Oct 4 13:21:45 2018 +0200 TST: Fixturize series/test_io.py (pandas-dev#22972) commit e6b0c29 Author: Anjali2019 <[email protected]> Date: Thu Oct 4 13:20:46 2018 +0200 TST: Fixturize series/test_missing.py (pandas-dev#22973) commit 9b405b8 Author: Joris Van den Bossche <[email protected]> Date: Thu Oct 4 13:16:28 2018 +0200 CLN: values is required argument in _shallow_copy_with_infer (pandas-dev#22983) commit c282e31 Author: h-vetinari <[email protected]> Date: Thu Oct 4 03:34:35 2018 +0200 Fix ASV import error (pandas-dev#22978) commit 11a0d93 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 14:26:34 2018 -0500 typerror commit a0cd5e7 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 14:25:38 2018 -0500 TypeError for Series commit 2247461 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 13:29:29 2018 -0500 Test op(Series[EA], EA]) commit c9fe5d3 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 13:21:33 2018 -0500 make strict commit 7ef697c Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 13:14:52 2018 -0500 Use super commit 35d4213 Merge: 0671e7d ee80803 Author: Tom Augspurger <[email protected]> Date: Wed Oct 3 13:11:05 2018 -0500 Merge remote-tracking branch 'upstream/master' into ea-divmod commit 0671e7d Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 11:10:42 2018 -0500 Fixup commit 1b4261f Merge: c92a4a8 1d9f76c Author: Tom Augspurger <[email protected]> Date: Tue Oct 2 10:58:43 2018 -0500 Merge remote-tracking branch 'upstream/master' into ea-divmod commit c92a4a8 Author: Tom Augspurger <[email protected]> Date: Mon Oct 1 16:56:15 2018 -0500 Update old test commit 52538fa Author: Tom Augspurger <[email protected]> Date: Mon Oct 1 16:51:48 2018 -0500 BUG: divmod return type * merge conflict * wip * indexes passing * op names * extension, arrays passing * fixup * lint * Fixed to_timestamp * Same error message for index, series * Fix freq handling in to_timestamp * dtype update * accept kwargs * fixups * updates * explicit * add to assert * wip period_array * wip period_array * order * sort order * test for hashing * update * lint * boxing * fix fixtures * infer * Remove seemingly unreachable code * lint * wip * Updates for master * simplify * wip * remove view * simplify * lint * Removed add_comparison_methods * xfail op * remove some * constructors * Constructor cleanup * misc fixups * more xfails * typo * Added asi8 * Allow setting nan * revert breaking docs * Override _add_sub_int_array * lint * Update PeriodIndex._simple_new * Clean up uses of .values, ._values, ._ndarray_values, ._data * one more values * remove xfails * Fixed freq handling in _shallow_copy with a freq * test updates * API: Keep PeriodIndex.values an ndarray * BUG: Raise for non-equal freq in take * Punt on DataFrame.replace specializing * lint * fixed xfail message * TST: _from_datetime64 * Fixups - Perf in period_array - pyarrow error - py2 compat * escape * dtype * revert and unxfail values * error catching * isort * Avoid PeriodArray.values * clarify _box_func usage * TST: unxfail ops tests * Avoid use of .values * __setitem__ type * Misc cleanups * docstring on PeriodArray * examples for period_array * remove _box_values_as_index * names * object_dtype * use __sub__ * lint * API: remove ordinal from period_array * catch exception * misc cleanup * Handle astype integer size * Bump test coverage * remove partial test * close bracket * change the test * isort * consistent _data * lint * ndarray_values -> asi8 * colocate ops * refactor PeriodIndex.item remove unused method * return NotImplemented for Series / Index * remove xpass * release note * types, use data * remove ufunc xpass
1 parent b12f27d commit 6d220c7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+1779
-577
lines changed

Diff for: doc/source/whatsnew/v0.24.0.txt

+19-10
Original file line numberDiff line numberDiff line change
@@ -145,33 +145,41 @@ Current Behavior:
145145

146146
.. _whatsnew_0240.enhancements.interval:
147147

148-
Storing Interval Data in Series and DataFrame
149-
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
148+
Storing Interval and Period Data in Series and DataFrame
149+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
150150

151-
Interval data may now be stored in a ``Series`` or ``DataFrame``, in addition to an
152-
:class:`IntervalIndex` like previously (:issue:`19453`).
151+
Interval and Period data may now be stored in a ``Series`` or ``DataFrame``, in addition to an
152+
:class:`IntervalIndex` and :class:`PeriodIndex` like previously (:issue:`19453`, :issue:`22862`).
153153

154154
.. ipython:: python
155155

156156
ser = pd.Series(pd.interval_range(0, 5))
157157
ser
158158
ser.dtype
159159

160-
Previously, these would be cast to a NumPy array of ``Interval`` objects. In general,
161-
this should result in better performance when storing an array of intervals in
162-
a :class:`Series`.
160+
And for periods:
161+
162+
.. ipython:: python
163+
164+
pser = pd.Series(pd.date_range("2000", freq="D", periods=5))
165+
pser
166+
pser.dtype
167+
168+
Previously, these would be cast to a NumPy array with object dtype. In general,
169+
this should result in better performance when storing an array of intervals or periods
170+
in a :class:`Series` or column of a :class:`DataFrame`.
163171

164-
Note that the ``.values`` of a ``Series`` containing intervals is no longer a NumPy
172+
Note that the ``.values`` of a ``Series`` containing one of these types is no longer a NumPy
165173
array, but rather an ``ExtensionArray``:
166174

167175
.. ipython:: python
168176

169177
ser.values
178+
pser.values
170179

171180
This is the same behavior as ``Series.values`` for categorical data. See
172181
:ref:`whatsnew_0240.api_breaking.interval_values` for more.
173182

174-
175183
.. _whatsnew_0240.enhancements.other:
176184

177185
Other Enhancements
@@ -360,7 +368,7 @@ New Behavior:
360368
This mirrors ``CategoricalIndex.values``, which returns a ``Categorical``.
361369

362370
For situations where you need an ``ndarray`` of ``Interval`` objects, use
363-
:meth:`numpy.asarray` or ``idx.astype(object)``.
371+
:meth:`numpy.asarray`.
364372

365373
.. ipython:: python
366374

@@ -811,6 +819,7 @@ update the ``ExtensionDtype._metadata`` tuple to match the signature of your
811819
- Updated the ``.type`` attribute for ``PeriodDtype``, ``DatetimeTZDtype``, and ``IntervalDtype`` to be instances of the dtype (``Period``, ``Timestamp``, and ``Interval`` respectively) (:issue:`22938`)
812820
- :func:`ExtensionArray.isna` is allowed to return an ``ExtensionArray`` (:issue:`22325`).
813821
- Support for reduction operations such as ``sum``, ``mean`` via opt-in base class method override (:issue:`22762`)
822+
- :meth:`Series.unstack` no longer converts extension arrays to object-dtype ndarrays. The output ``DataFrame`` will now have the same dtype as the input. This changes behavior for Categorical and Sparse data (:issue:`23077`).
814823

815824
.. _whatsnew_0240.api.incompatibilities:
816825

Diff for: pandas/core/arrays/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from .categorical import Categorical # noqa
55
from .datetimes import DatetimeArrayMixin # noqa
66
from .interval import IntervalArray # noqa
7-
from .period import PeriodArrayMixin # noqa
7+
from .period import PeriodArray, period_array # noqa
88
from .timedeltas import TimedeltaArrayMixin # noqa
99
from .integer import ( # noqa
1010
IntegerArray, integer_array)

Diff for: pandas/core/arrays/categorical.py

+19-4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
is_categorical_dtype,
3030
is_float_dtype,
3131
is_integer_dtype,
32+
is_object_dtype,
3233
is_list_like, is_sequence,
3334
is_scalar, is_iterator,
3435
is_dict_like)
@@ -342,7 +343,6 @@ def __init__(self, values, categories=None, ordered=None, dtype=None,
342343
# a.) use categories, ordered
343344
# b.) use values.dtype
344345
# c.) infer from values
345-
346346
if dtype is not None:
347347
# The dtype argument takes precedence over values.dtype (if any)
348348
if isinstance(dtype, compat.string_types):
@@ -2478,11 +2478,26 @@ def _get_codes_for_values(values, categories):
24782478
utility routine to turn values into codes given the specified categories
24792479
"""
24802480
from pandas.core.algorithms import _get_data_algo, _hashtables
2481-
if is_dtype_equal(values.dtype, categories.dtype):
2481+
dtype_equal = is_dtype_equal(values.dtype, categories.dtype)
2482+
2483+
if dtype_equal:
24822484
# To prevent erroneous dtype coercion in _get_data_algo, retrieve
24832485
# the underlying numpy array. gh-22702
2484-
values = getattr(values, 'values', values)
2485-
categories = getattr(categories, 'values', categories)
2486+
values = getattr(values, '_ndarray_values', values)
2487+
categories = getattr(categories, '_ndarray_values', categories)
2488+
elif (is_extension_array_dtype(categories.dtype) and
2489+
is_object_dtype(values)):
2490+
# Support inferring the correct extension dtype from an array of
2491+
# scalar objects. e.g.
2492+
# Categorical(array[Period, Period], categories=PeriodIndex(...))
2493+
try:
2494+
values = (
2495+
categories.dtype.construct_array_type()._from_sequence(values)
2496+
)
2497+
except Exception:
2498+
# but that may fail for any reason, so fall back to object
2499+
values = ensure_object(values)
2500+
categories = ensure_object(categories)
24862501
else:
24872502
values = ensure_object(values)
24882503
categories = ensure_object(categories)

Diff for: pandas/core/arrays/datetimelike.py

+4-14
Original file line numberDiff line numberDiff line change
@@ -474,17 +474,8 @@ def _addsub_int_array(self, other, op):
474474
result : same class as self
475475
"""
476476
assert op in [operator.add, operator.sub]
477-
if is_period_dtype(self):
478-
# easy case for PeriodIndex
479-
if op is operator.sub:
480-
other = -other
481-
res_values = checked_add_with_arr(self.asi8, other,
482-
arr_mask=self._isnan)
483-
res_values = res_values.view('i8')
484-
res_values[self._isnan] = iNaT
485-
return self._from_ordinals(res_values, freq=self.freq)
486-
487-
elif self.freq is None:
477+
478+
if self.freq is None:
488479
# GH#19123
489480
raise NullFrequencyError("Cannot shift with no freq")
490481

@@ -524,10 +515,9 @@ def _addsub_offset_array(self, other, op):
524515
left = lib.values_from_object(self.astype('O'))
525516

526517
res_values = op(left, np.array(other))
527-
kwargs = {}
528518
if not is_period_dtype(self):
529-
kwargs['freq'] = 'infer'
530-
return type(self)(res_values, **kwargs)
519+
return type(self)(res_values, freq='infer')
520+
return self._from_sequence(res_values)
531521

532522
@deprecate_kwarg(old_arg_name='n', new_arg_name='periods')
533523
def shift(self, periods, freq=None):

Diff for: pandas/core/arrays/datetimes.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -832,7 +832,7 @@ def to_period(self, freq=None):
832832
pandas.PeriodIndex: Immutable ndarray holding ordinal values
833833
pandas.DatetimeIndex.to_pydatetime: Return DatetimeIndex as object
834834
"""
835-
from pandas.core.arrays import PeriodArrayMixin
835+
from pandas.core.arrays import PeriodArray
836836

837837
if self.tz is not None:
838838
warnings.warn("Converting to PeriodArray/Index representation "
@@ -847,7 +847,7 @@ def to_period(self, freq=None):
847847

848848
freq = get_period_alias(freq)
849849

850-
return PeriodArrayMixin(self.values, freq=freq)
850+
return PeriodArray._from_datetime64(self.values, freq, tz=self.tz)
851851

852852
def to_perioddelta(self, freq):
853853
"""

0 commit comments

Comments
 (0)