Pandas version checks
-
[X] I have checked that this issue has not already been reported.
-
[X] I have confirmed this bug exists on the latest version of pandas.
-
[ ] I have confirmed this bug exists on the main branch of pandas.
Reproducible Example
>>> x = 340.3333333333333
>>> pd.Timestamp(x, unit='us')
Timestamp('1970-01-01 00:00:00.000340333')
>>> pd.Timestamp(x, unit='us').unit
'ns'
>>> pd.Timestamp(x, unit='us').as_unit('us')
Timestamp('1970-01-01 00:00:00.000340')
>>> pd.Timestamp(x, unit='us').as_unit('us').unit
'us'
Issue Description
When creating a pd.Timestamp
& pd.Timedelta
with a specific unit
, the resulting Timestamp
seems to be always of unit ns
. We are having to perform as_unit('us')
to retrieve the desired result.
Expected Behavior
>>> pd.Timestamp(x, unit='us')
Timestamp('1970-01-01 00:00:00.000340')
Installed Versions
Comment From: jbrockmendel
The "unit" keyword describes how the input is interpreted, not how the result is stored internally (which the .unit attribute represents). The overlapping naming is unfortunate.
cc @MarcoGorelli
Comment From: mroeschke
I forgot if this was discussed, but is it possible if a user passes a numeric + unit to automatically also store the representation in that unit?
Comment From: jbrockmendel
is it possible if a user passes a numeric + unit to automatically also store the representation in that unit?
For units that we support, yes. For minute and lower we'd default back to seconds. I'd be on board with this.
Comment From: mroeschke
For units that we support, yes. For minute and lower we'd default back to seconds. I'd be on board with this.
Likewise, makes sense to me
Comment From: jbrockmendel
OK with putting this in 2.0?
Comment From: mroeschke
Yes definitely
Comment From: MarcoGorelli
OK with putting this in 2.0?
totally - marking as blocker then if that's OK?
Comment From: jbrockmendel
Implementing this I now remember why we didn't do it already: it introduces possibly-unwanted rounding in float cases. i.e Timestamp(1.5, unit="s)
drops the half-second. We have 6 tests TestTimestamp::test_unit
that this breaks.
Comment From: mroeschke
it introduces possibly-unwanted rounding in float cases
Ah okay. Yeah I don't think specifying unit
should potentially round the input. Maybe for this particular case then we should document that unit
does not set the unit
and users should use as_unit
afterwards
Comment From: mroeschke
totally - marking as blocker then if that's OK?
IMO I don't think this should be a strict blocker for 2.0 but a nice to fix/document
Comment From: MarcoGorelli
sure, sounds good!
separate issue but float inputs to to_datetime
feel like something we should consider deprecating anyway...removing the 'blocker' label anyway