DEPR: Series.first() and DataFrame.first() by DeaMariaLeon · Pull Request #53419 · pandas-dev/pandas (original) (raw)

Expand Up

@@ -10,37 +10,48 @@

)

import pandas._testing as tm

deprecated_msg = "first is deprecated"

class TestFirst:

def test_first_subset(self, frame_or_series):

ts = tm.makeTimeDataFrame(freq="12h")

ts = tm.get_obj(ts, frame_or_series)

result = ts.first("10d")

assert len(result) == 20

with tm.assert_produces_warning(FutureWarning, match=deprecated_msg):

result = ts.first("10d")

assert len(result) == 20

ts = tm.makeTimeDataFrame(freq="D")

ts = tm.get_obj(ts, frame_or_series)

result = ts.first("10d")

assert len(result) == 10

with tm.assert_produces_warning(FutureWarning, match=deprecated_msg):

result = ts.first("10d")

assert len(result) == 10

result = ts.first("3M")

expected = ts[:"3/31/2000"]

tm.assert_equal(result, expected)

with tm.assert_produces_warning(FutureWarning, match=deprecated_msg):

result = ts.first("3M")

expected = ts[:"3/31/2000"]

tm.assert_equal(result, expected)

result = ts.first("21D")

expected = ts[:21]

tm.assert_equal(result, expected)

with tm.assert_produces_warning(FutureWarning, match=deprecated_msg):

result = ts.first("21D")

expected = ts[:21]

tm.assert_equal(result, expected)

result = ts[:0].first("3M")

tm.assert_equal(result, ts[:0])

with tm.assert_produces_warning(FutureWarning, match=deprecated_msg):

result = ts[:0].first("3M")

tm.assert_equal(result, ts[:0])

def test_first_last_raises(self, frame_or_series):

# GH#20725

obj = DataFrame([[1, 2, 3], [4, 5, 6]])

obj = tm.get_obj(obj, frame_or_series)

msg = "'first' only supports a DatetimeIndex index"

with pytest.raises(TypeError, match=msg): # index is not a DatetimeIndex

with tm.assert_produces_warning(

FutureWarning, match=deprecated_msg

), pytest.raises(

TypeError, match=msg

): # index is not a DatetimeIndex

obj.first("1D")

msg = "'last' only supports a DatetimeIndex index"

Expand Down Expand Up

@@ -73,7 +84,8 @@ def test_last_subset(self, frame_or_series):

def test_first_with_first_day_last_of_month(self, frame_or_series, start, periods):

# GH#29623

x = frame_or_series([1] * 100, index=bdate_range(start, periods=100))

result = x.first("1M")

with tm.assert_produces_warning(FutureWarning, match=deprecated_msg):

result = x.first("1M")

expected = frame_or_series(

[1] * periods, index=bdate_range(start, periods=periods)

)

Expand All

@@ -82,16 +94,20 @@ def test_first_with_first_day_last_of_month(self, frame_or_series, start, period

def test_first_with_first_day_end_of_frq_n_greater_one(self, frame_or_series):

# GH#29623

x = frame_or_series([1] * 100, index=bdate_range("2010-03-31", periods=100))

result = x.first("2M")

with tm.assert_produces_warning(FutureWarning, match=deprecated_msg):

result = x.first("2M")

expected = frame_or_series(

[1] * 23, index=bdate_range("2010-03-31", "2010-04-30")

)

tm.assert_equal(result, expected)

@pytest.mark.parametrize("func", ["first", "last"])

def test_empty_not_input(self, func):

def test_empty_not_input(self):

# GH#51032

df = DataFrame(index=pd.DatetimeIndex([]))

result = getattr(df, func)(offset=1)

result = df.last(offset=1)

with tm.assert_produces_warning(FutureWarning, match=deprecated_msg):

result = df.first(offset=1)

tm.assert_frame_equal(df, result)

assert df is not result