Skip to content

Commit 5a37ab9

Browse files
committed
Add unit property and as_unit method to DatetimeIndex and TimedeltaIndex
1 parent fdbe1df commit 5a37ab9

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

pandas-stubs/core/indexes/datetimelike.pyi

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
from typing import Literal
2+
13
from pandas.core.indexes.extension import ExtensionIndex
24
from pandas.core.indexes.timedeltas import TimedeltaIndex
5+
from typing_extensions import Self
36

47
from pandas._libs.tslibs import BaseOffset
58
from pandas._typing import S1
@@ -19,4 +22,7 @@ class DatetimeIndexOpsMixin(ExtensionIndex[S1]):
1922
self, other: DatetimeIndexOpsMixin
2023
) -> TimedeltaIndex: ...
2124

22-
class DatetimeTimedeltaMixin(DatetimeIndexOpsMixin[S1]): ...
25+
class DatetimeTimedeltaMixin(DatetimeIndexOpsMixin[S1]):
26+
@property
27+
def unit(self) -> str: ...
28+
def as_unit(self, unit: Literal["s", "ms", "us", "ns"]) -> Self: ...

tests/test_timefuncs.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,11 @@ def test_datetimeindex_accessors() -> None:
522522
check(assert_type(i0.month_name(), pd.Index), pd.Index, str)
523523
check(assert_type(i0.day_name(), pd.Index), pd.Index, str)
524524
check(assert_type(i0.is_normalized, bool), bool)
525+
check(assert_type(i0.unit, str), str)
526+
check(assert_type(i0.as_unit("s"), pd.DatetimeIndex), pd.DatetimeIndex)
527+
check(assert_type(i0.as_unit("ms"), pd.DatetimeIndex), pd.DatetimeIndex)
528+
check(assert_type(i0.as_unit("us"), pd.DatetimeIndex), pd.DatetimeIndex)
529+
check(assert_type(i0.as_unit("ns"), pd.DatetimeIndex), pd.DatetimeIndex)
525530

526531

527532
def test_timedeltaindex_accessors() -> None:
@@ -542,6 +547,11 @@ def test_timedeltaindex_accessors() -> None:
542547
assert_type(i0.floor("D"), pd.TimedeltaIndex), pd.TimedeltaIndex, pd.Timedelta
543548
)
544549
check(assert_type(i0.ceil("D"), pd.TimedeltaIndex), pd.TimedeltaIndex, pd.Timedelta)
550+
check(assert_type(i0.unit, str), str)
551+
check(assert_type(i0.as_unit("s"), pd.TimedeltaIndex), pd.TimedeltaIndex)
552+
check(assert_type(i0.as_unit("ms"), pd.TimedeltaIndex), pd.TimedeltaIndex)
553+
check(assert_type(i0.as_unit("us"), pd.TimedeltaIndex), pd.TimedeltaIndex)
554+
check(assert_type(i0.as_unit("ns"), pd.TimedeltaIndex), pd.TimedeltaIndex)
545555

546556

547557
def test_periodindex_accessors() -> None:

0 commit comments

Comments
 (0)