Skip to content

Commit 1211711

Browse files
committed
Stricter testing of 'monotocity' when reindexing with ffill or bfill.
1 parent 93158c5 commit 1211711

File tree

3 files changed

+28
-5
lines changed

3 files changed

+28
-5
lines changed

pandas/core/index.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -811,12 +811,12 @@ def get_indexer(self, target, method=None, limit=None):
811811
'objects')
812812

813813
if method == 'pad':
814-
if not self.is_monotonic:
815-
raise AssertionError('Must be monotonic for forward fill')
814+
if not self.is_monotonic or not target.is_monotonic:
815+
raise ValueError('Must be monotonic for forward fill')
816816
indexer = self._engine.get_pad_indexer(target.values, limit)
817817
elif method == 'backfill':
818-
if not self.is_monotonic:
819-
raise AssertionError('Must be monotonic for backward fill')
818+
if not self.is_monotonic or not target.is_monotonic:
819+
raise ValueError('Must be monotonic for backward fill')
820820
indexer = self._engine.get_backfill_indexer(target.values, limit)
821821
elif method is None:
822822
indexer = self._engine.get_indexer(target.values)

pandas/tests/test_frame.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1629,6 +1629,29 @@ def test_nested_exception(self):
16291629
repr(df)
16301630
except Exception as e:
16311631
self.assertNotEqual(type(e), UnboundLocalError)
1632+
1633+
def test_reverse_reindex_ffill_raises(self):
1634+
dr = pd.date_range('2013-08-01', periods=6, freq='B')
1635+
data = np.random.randn(6,1)
1636+
df = pd.DataFrame(data, index=dr, columns=list('A'))
1637+
df['A'][3] = np.nan
1638+
df_rev = pd.DataFrame(data, index=dr[::-1], columns=list('A'))
1639+
# Reverse index is not 'monotonic'
1640+
self.assertRaises(ValueError, df_rev.reindex, df.index, method='pad')
1641+
self.assertRaises(ValueError, df_rev.reindex, df.index, method='ffill')
1642+
self.assertRaises(ValueError, df_rev.reindex, df.index, method='bfill')
1643+
1644+
def test_reversed_reindex_ffill_raises(self):
1645+
dr = pd.date_range('2013-08-01', periods=6, freq='B')
1646+
data = np.random.randn(6,1)
1647+
df = pd.DataFrame(data, index=dr, columns=list('A'))
1648+
df['A'][3] = np.nan
1649+
df = pd.DataFrame(data, index=dr, columns=list('A'))
1650+
# Reversed reindex is not 'monotonic'
1651+
self.assertRaises(ValueError, df.reindex, dr[::-1], method='pad')
1652+
self.assertRaises(ValueError, df.reindex, dr[::-1], method='ffill')
1653+
self.assertRaises(ValueError, df.reindex, dr[::-1], method='bfill')
1654+
16321655

16331656
_seriesd = tm.getSeriesData()
16341657
_tsd = tm.getTimeSeriesData()

pandas/tseries/tests/test_timeseries.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ def test_pad_require_monotonicity(self):
546546

547547
rng2 = rng[::2][::-1]
548548

549-
self.assertRaises(AssertionError, rng2.get_indexer, rng,
549+
self.assertRaises(ValueError, rng2.get_indexer, rng,
550550
method='pad')
551551

552552
def test_frame_ctor_datetime64_column(self):

0 commit comments

Comments
 (0)