From 51844c2ff793c2adeac80853d6cb255d162330fc Mon Sep 17 00:00:00 2001 From: Cullen Garvey Date: Sat, 23 Sep 2017 10:10:05 -0500 Subject: [PATCH] updated DataFrame to behave consistent with Series when calling first_valid_index/last_valid_index on all NaN values. Closes GH17400 --- pandas/core/frame.py | 21 ++++++++++++++++++--- pandas/tests/frame/test_timeseries.py | 5 +++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/pandas/core/frame.py b/pandas/core/frame.py index dd5d490ea66a8..3cb6dbfb7664f 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -4070,7 +4070,15 @@ def first_valid_index(self): if len(self) == 0: return None - return self.index[self.count(1) > 0][0] + try: + return self.index[self.count(1) > 0][0] + except IndexError: + # Ensures same behavior as a Series of all Null values. + mask = isna(self._values) + if all(mask): + return None + + raise def last_valid_index(self): """ @@ -4079,8 +4087,15 @@ def last_valid_index(self): if len(self) == 0: return None - return self.index[self.count(1) > 0][-1] - + try: + return self.index[self.count(1) > 0][-1] + except IndexError: + # Ensures same behavior as a Series of all Null values. + mask = isna(self._values) + if all(mask): + return None + + raise # ---------------------------------------------------------------------- # Data reshaping diff --git a/pandas/tests/frame/test_timeseries.py b/pandas/tests/frame/test_timeseries.py index 19fbf854256c6..c78dfefe93c02 100644 --- a/pandas/tests/frame/test_timeseries.py +++ b/pandas/tests/frame/test_timeseries.py @@ -440,6 +440,11 @@ def test_first_last_valid(self): assert empty.last_valid_index() is None assert empty.first_valid_index() is None + # GH17400 + allnulls = DataFrame({'a': [np.nan, np.nan]}) + assert allnulls.first_valid_index() is None + assert allnulls.last_valid_index() is None + def test_at_time_frame(self): rng = date_range('1/1/2000', '1/5/2000', freq='5min') ts = DataFrame(np.random.randn(len(rng), 2), index=rng)