Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions pandas/tests/frame/methods/test_first_and_last.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
"""
Note: includes tests for `last`
"""
import pytest

from pandas import DataFrame
import pandas._testing as tm


class TestFirst:
def test_first_subset(self):
ts = tm.makeTimeDataFrame(freq="12h")
result = ts.first("10d")
assert len(result) == 20

ts = tm.makeTimeDataFrame(freq="D")
result = ts.first("10d")
assert len(result) == 10

result = ts.first("3M")
expected = ts[:"3/31/2000"]
tm.assert_frame_equal(result, expected)

result = ts.first("21D")
expected = ts[:21]
tm.assert_frame_equal(result, expected)

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

def test_first_raises(self):
# GH#20725
df = DataFrame([[1, 2, 3], [4, 5, 6]])
with pytest.raises(TypeError): # index is not a DatetimeIndex
df.first("1D")

def test_last_subset(self):
ts = tm.makeTimeDataFrame(freq="12h")
result = ts.last("10d")
assert len(result) == 20

ts = tm.makeTimeDataFrame(nper=30, freq="D")
result = ts.last("10d")
assert len(result) == 10

result = ts.last("21D")
expected = ts["2000-01-10":]
tm.assert_frame_equal(result, expected)

result = ts.last("21D")
expected = ts[-21:]
tm.assert_frame_equal(result, expected)

result = ts[:0].last("3M")
tm.assert_frame_equal(result, ts[:0])

def test_last_raises(self):
# GH20725
df = DataFrame([[1, 2, 3], [4, 5, 6]])
with pytest.raises(TypeError): # index is not a DatetimeIndex
df.last("1D")
52 changes: 0 additions & 52 deletions pandas/tests/frame/test_timeseries.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,58 +119,6 @@ def test_first_valid_index_all_nan(self, klass):
assert obj.first_valid_index() is None
assert obj.iloc[:0].first_valid_index() is None

def test_first_subset(self):
ts = tm.makeTimeDataFrame(freq="12h")
result = ts.first("10d")
assert len(result) == 20

ts = tm.makeTimeDataFrame(freq="D")
result = ts.first("10d")
assert len(result) == 10

result = ts.first("3M")
expected = ts[:"3/31/2000"]
tm.assert_frame_equal(result, expected)

result = ts.first("21D")
expected = ts[:21]
tm.assert_frame_equal(result, expected)

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

def test_first_raises(self):
# GH20725
df = pd.DataFrame([[1, 2, 3], [4, 5, 6]])
with pytest.raises(TypeError): # index is not a DatetimeIndex
df.first("1D")

def test_last_subset(self):
ts = tm.makeTimeDataFrame(freq="12h")
result = ts.last("10d")
assert len(result) == 20

ts = tm.makeTimeDataFrame(nper=30, freq="D")
result = ts.last("10d")
assert len(result) == 10

result = ts.last("21D")
expected = ts["2000-01-10":]
tm.assert_frame_equal(result, expected)

result = ts.last("21D")
expected = ts[-21:]
tm.assert_frame_equal(result, expected)

result = ts[:0].last("3M")
tm.assert_frame_equal(result, ts[:0])

def test_last_raises(self):
# GH20725
df = pd.DataFrame([[1, 2, 3], [4, 5, 6]])
with pytest.raises(TypeError): # index is not a DatetimeIndex
df.last("1D")

def test_operation_on_NaT(self):
# Both NaT and Timestamp are in DataFrame.
df = pd.DataFrame({"foo": [pd.NaT, pd.NaT, pd.Timestamp("2012-05-01")]})
Expand Down
69 changes: 69 additions & 0 deletions pandas/tests/series/methods/test_first_and_last.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
"""
Note: includes tests for `last`
"""

import numpy as np
import pytest

from pandas import Series, date_range
import pandas._testing as tm


class TestFirst:
def test_first_subset(self):
rng = date_range("1/1/2000", "1/1/2010", freq="12h")
ts = Series(np.random.randn(len(rng)), index=rng)
result = ts.first("10d")
assert len(result) == 20

rng = date_range("1/1/2000", "1/1/2010", freq="D")
ts = Series(np.random.randn(len(rng)), index=rng)
result = ts.first("10d")
assert len(result) == 10

result = ts.first("3M")
expected = ts[:"3/31/2000"]
tm.assert_series_equal(result, expected)

result = ts.first("21D")
expected = ts[:21]
tm.assert_series_equal(result, expected)

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

def test_first_raises(self):
# GH#20725
ser = Series("a b c".split())
msg = "'first' only supports a DatetimeIndex index"
with pytest.raises(TypeError, match=msg):
ser.first("1D")

def test_last_subset(self):
rng = date_range("1/1/2000", "1/1/2010", freq="12h")
ts = Series(np.random.randn(len(rng)), index=rng)
result = ts.last("10d")
assert len(result) == 20

rng = date_range("1/1/2000", "1/1/2010", freq="D")
ts = Series(np.random.randn(len(rng)), index=rng)
result = ts.last("10d")
assert len(result) == 10

result = ts.last("21D")
expected = ts["12/12/2009":]
tm.assert_series_equal(result, expected)

result = ts.last("21D")
expected = ts[-21:]
tm.assert_series_equal(result, expected)

result = ts[:0].last("3M")
tm.assert_series_equal(result, ts[:0])

def test_last_raises(self):
# GH#20725
ser = Series("a b c".split())
msg = "'last' only supports a DatetimeIndex index"
with pytest.raises(TypeError, match=msg):
ser.last("1D")
54 changes: 0 additions & 54 deletions pandas/tests/series/test_timeseries.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,60 +167,6 @@ def test_promote_datetime_date(self):
expected = rng.get_indexer(ts_slice.index)
tm.assert_numpy_array_equal(result, expected)

def test_first_subset(self):
ts = _simple_ts("1/1/2000", "1/1/2010", freq="12h")
result = ts.first("10d")
assert len(result) == 20

ts = _simple_ts("1/1/2000", "1/1/2010")
result = ts.first("10d")
assert len(result) == 10

result = ts.first("3M")
expected = ts[:"3/31/2000"]
tm.assert_series_equal(result, expected)

result = ts.first("21D")
expected = ts[:21]
tm.assert_series_equal(result, expected)

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

def test_first_raises(self):
# GH20725
ser = pd.Series("a b c".split())
msg = "'first' only supports a DatetimeIndex index"
with pytest.raises(TypeError, match=msg):
ser.first("1D")

def test_last_subset(self):
ts = _simple_ts("1/1/2000", "1/1/2010", freq="12h")
result = ts.last("10d")
assert len(result) == 20

ts = _simple_ts("1/1/2000", "1/1/2010")
result = ts.last("10d")
assert len(result) == 10

result = ts.last("21D")
expected = ts["12/12/2009":]
tm.assert_series_equal(result, expected)

result = ts.last("21D")
expected = ts[-21:]
tm.assert_series_equal(result, expected)

result = ts[:0].last("3M")
tm.assert_series_equal(result, ts[:0])

def test_last_raises(self):
# GH20725
ser = pd.Series("a b c".split())
msg = "'last' only supports a DatetimeIndex index"
with pytest.raises(TypeError, match=msg):
ser.last("1D")

def test_format_pre_1900_dates(self):
rng = date_range("1/1/1850", "1/1/1950", freq="A-DEC")
rng.format()
Expand Down