Skip to content

COMPAT: Scalar types immutable #17116

Closed
Closed
@jbrockmendel

Description

@jbrockmendel

My impression (discussion somewhere on gitter) is that pd.Period is supposed to be immutable. That would certainly make sense for objects going into a PeriodIndex.

per = pd.Period('2014Q1')
>>> per
Period('2014Q1', 'Q-DEC')

freq = per.freq.copy()
freq.n *= 2
per.freq = freq
>>> per
Period('2014Q1', '2Q-DEC')

per.freq is a DateOffset object*, which is defined in tseries.offsets. There is a comment in tseries.offsets.BusinessHourMixin.apply saying "# calculate here because offset is not immutable".

So a couple of questions:

  1. Are we sure pd.Period should be immutable? If so, is there a preferred way of imposing that? Note that the class is defined in a .pyx file and some methods explicitly call __new__.
  2. Does the comment about offset not being immutable mean that it can't or shouldn't be? Outside of __init__ and __setstate__, the only place in tseries.offsets where I see any self.foo attributes being set is self.daytime = False in BusinessHourMixin._get_business_hours_by_sec. grepping for "daytime", this attribute does not appear to be referenced anywhere else.

* BTW, I think DateOffset is one of a small number of commonly-used classes for which there is not a ABCDateOffset equivalent. Is that by design? If not, I'll be happy to make one.

Metadata

Metadata

Assignees

No one assigned

    Labels

    API DesignDatetimeDatetime data dtypeIntervalInterval data typePeriodPeriod data typeTestingpandas testing functions or related to the test suite

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions