done
This commit is contained in:
@ -0,0 +1,171 @@
|
||||
""" generic datetimelike tests """
|
||||
|
||||
import numpy as np
|
||||
import pytest
|
||||
|
||||
import pandas as pd
|
||||
import pandas._testing as tm
|
||||
|
||||
|
||||
class TestDatetimeLike:
|
||||
@pytest.fixture(
|
||||
params=[
|
||||
pd.period_range("20130101", periods=5, freq="D"),
|
||||
pd.TimedeltaIndex(
|
||||
[
|
||||
"0 days 01:00:00",
|
||||
"1 days 01:00:00",
|
||||
"2 days 01:00:00",
|
||||
"3 days 01:00:00",
|
||||
"4 days 01:00:00",
|
||||
],
|
||||
dtype="timedelta64[ns]",
|
||||
freq="D",
|
||||
),
|
||||
pd.DatetimeIndex(
|
||||
["2013-01-01", "2013-01-02", "2013-01-03", "2013-01-04", "2013-01-05"],
|
||||
dtype="datetime64[ns]",
|
||||
freq="D",
|
||||
),
|
||||
]
|
||||
)
|
||||
def simple_index(self, request):
|
||||
return request.param
|
||||
|
||||
def test_isin(self, simple_index):
|
||||
index = simple_index[:4]
|
||||
result = index.isin(index)
|
||||
assert result.all()
|
||||
|
||||
result = index.isin(list(index))
|
||||
assert result.all()
|
||||
|
||||
result = index.isin([index[2], 5])
|
||||
expected = np.array([False, False, True, False])
|
||||
tm.assert_numpy_array_equal(result, expected)
|
||||
|
||||
def test_argsort_matches_array(self, simple_index):
|
||||
idx = simple_index
|
||||
idx = idx.insert(1, pd.NaT)
|
||||
|
||||
result = idx.argsort()
|
||||
expected = idx._data.argsort()
|
||||
tm.assert_numpy_array_equal(result, expected)
|
||||
|
||||
def test_can_hold_identifiers(self, simple_index):
|
||||
idx = simple_index
|
||||
key = idx[0]
|
||||
assert idx._can_hold_identifiers_and_holds_name(key) is False
|
||||
|
||||
def test_shift_identity(self, simple_index):
|
||||
idx = simple_index
|
||||
tm.assert_index_equal(idx, idx.shift(0))
|
||||
|
||||
def test_shift_empty(self, simple_index):
|
||||
# GH#14811
|
||||
idx = simple_index[:0]
|
||||
tm.assert_index_equal(idx, idx.shift(1))
|
||||
|
||||
def test_str(self, simple_index):
|
||||
# test the string repr
|
||||
idx = simple_index.copy()
|
||||
idx.name = "foo"
|
||||
assert f"length={len(idx)}" not in str(idx)
|
||||
assert "'foo'" in str(idx)
|
||||
assert type(idx).__name__ in str(idx)
|
||||
|
||||
if hasattr(idx, "tz"):
|
||||
if idx.tz is not None:
|
||||
assert idx.tz in str(idx)
|
||||
if isinstance(idx, pd.PeriodIndex):
|
||||
assert f"dtype='period[{idx.freqstr}]'" in str(idx)
|
||||
else:
|
||||
assert f"freq='{idx.freqstr}'" in str(idx)
|
||||
|
||||
def test_view(self, simple_index):
|
||||
idx = simple_index
|
||||
|
||||
idx_view = idx.view("i8")
|
||||
result = type(simple_index)(idx)
|
||||
tm.assert_index_equal(result, idx)
|
||||
|
||||
msg = "Passing a type in .*Index.view is deprecated"
|
||||
with tm.assert_produces_warning(FutureWarning, match=msg):
|
||||
idx_view = idx.view(type(simple_index))
|
||||
result = type(simple_index)(idx)
|
||||
tm.assert_index_equal(result, idx_view)
|
||||
|
||||
def test_map_callable(self, simple_index):
|
||||
index = simple_index
|
||||
expected = index + index.freq
|
||||
result = index.map(lambda x: x + index.freq)
|
||||
tm.assert_index_equal(result, expected)
|
||||
|
||||
# map to NaT
|
||||
result = index.map(lambda x: pd.NaT if x == index[0] else x)
|
||||
expected = pd.Index([pd.NaT] + index[1:].tolist())
|
||||
tm.assert_index_equal(result, expected)
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"mapper",
|
||||
[
|
||||
lambda values, index: {i: e for e, i in zip(values, index)},
|
||||
lambda values, index: pd.Series(values, index, dtype=object),
|
||||
],
|
||||
)
|
||||
@pytest.mark.filterwarnings(r"ignore:PeriodDtype\[B\] is deprecated:FutureWarning")
|
||||
def test_map_dictlike(self, mapper, simple_index):
|
||||
index = simple_index
|
||||
expected = index + index.freq
|
||||
|
||||
# don't compare the freqs
|
||||
if isinstance(expected, (pd.DatetimeIndex, pd.TimedeltaIndex)):
|
||||
expected = expected._with_freq(None)
|
||||
|
||||
result = index.map(mapper(expected, index))
|
||||
tm.assert_index_equal(result, expected)
|
||||
|
||||
expected = pd.Index([pd.NaT] + index[1:].tolist())
|
||||
result = index.map(mapper(expected, index))
|
||||
tm.assert_index_equal(result, expected)
|
||||
|
||||
# empty map; these map to np.nan because we cannot know
|
||||
# to re-infer things
|
||||
expected = pd.Index([np.nan] * len(index))
|
||||
result = index.map(mapper([], []))
|
||||
tm.assert_index_equal(result, expected)
|
||||
|
||||
def test_getitem_preserves_freq(self, simple_index):
|
||||
index = simple_index
|
||||
assert index.freq is not None
|
||||
|
||||
result = index[:]
|
||||
assert result.freq == index.freq
|
||||
|
||||
def test_where_cast_str(self, simple_index):
|
||||
index = simple_index
|
||||
|
||||
mask = np.ones(len(index), dtype=bool)
|
||||
mask[-1] = False
|
||||
|
||||
result = index.where(mask, str(index[0]))
|
||||
expected = index.where(mask, index[0])
|
||||
tm.assert_index_equal(result, expected)
|
||||
|
||||
result = index.where(mask, [str(index[0])])
|
||||
tm.assert_index_equal(result, expected)
|
||||
|
||||
expected = index.astype(object).where(mask, "foo")
|
||||
result = index.where(mask, "foo")
|
||||
tm.assert_index_equal(result, expected)
|
||||
|
||||
result = index.where(mask, ["foo"])
|
||||
tm.assert_index_equal(result, expected)
|
||||
|
||||
@pytest.mark.parametrize("unit", ["ns", "us", "ms", "s"])
|
||||
def test_diff(self, unit):
|
||||
# GH 55080
|
||||
dti = pd.to_datetime([10, 20, 30], unit=unit).as_unit(unit)
|
||||
result = dti.diff(1)
|
||||
expected = pd.to_timedelta([pd.NaT, 10, 10], unit=unit).as_unit(unit)
|
||||
tm.assert_index_equal(result, expected)
|
Reference in New Issue
Block a user