Skip to content

Commit 2c4bf16

Browse files
committed
NA Compat
1 parent e103ae0 commit 2c4bf16

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

pandas/core/indexes/interval.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,16 +1002,20 @@ def delete(self, loc):
10021002

10031003
def insert(self, loc, item):
10041004
if isinstance(item, Interval):
1005-
if not item.closed == self.closed:
1005+
if item.closed != self.closed:
10061006
raise ValueError('inserted item must be closed on the same '
10071007
'side as the index')
10081008
left_insert = item.left
10091009
right_insert = item.right
10101010
elif is_scalar(item) and isna(item):
10111011
# GH 18295
1012+
if item is not self.left._na_value:
1013+
raise TypeError('cannot insert with incompatible NA value: '
1014+
'got {item}, expected {na}'
1015+
.format(item=item, na=self.left._na_value))
10121016
left_insert = right_insert = item
10131017
else:
1014-
raise ValueError('can only insert Interval objects and NaN into '
1018+
raise ValueError('can only insert Interval objects and NA into '
10151019
'an IntervalIndex')
10161020

10171021
new_left = self.left.insert(loc, left_insert)

pandas/tests/indexes/test_interval.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -375,11 +375,30 @@ def test_insert(self):
375375
pytest.raises(ValueError, self.index.insert, 0,
376376
Interval(2, 3, closed='left'))
377377

378+
@pytest.mark.parametrize('data', [
379+
interval_range(0, periods=10),
380+
interval_range(1.7, periods=8, freq=2.5),
381+
interval_range(Timestamp('20170101'), periods=12),
382+
interval_range(Timedelta('1 day'), periods=6),
383+
IntervalIndex.from_tuples([('a', 'd'), ('e', 'j'), ('w', 'z')]),
384+
IntervalIndex.from_tuples([(1, 2), ('a', 'z'), (3.14, 6.28)])])
385+
def test_insert_na(self, data):
378386
# GH 18295
379-
expected = self.index_with_nan
380-
result = self.index.insert(1, np.nan)
387+
valid_na, invalid_na = np.nan, pd.NaT
388+
if data.left._na_value is pd.NaT:
389+
valid_na, invalid_na = invalid_na, valid_na
390+
391+
# valid insertion
392+
expected = IntervalIndex([data[0], np.nan]).append(data[1:])
393+
result = data.insert(1, valid_na)
381394
tm.assert_index_equal(result, expected)
382395

396+
# invalid insertion
397+
msg = ('cannot insert with incompatible NA value: got {invalid}, '
398+
'expected {valid}').format(invalid=invalid_na, valid=valid_na)
399+
with tm.assert_raises_regex(TypeError, msg):
400+
data.insert(1, invalid_na)
401+
383402
def test_take(self, closed):
384403
index = self.create_index(closed=closed)
385404

0 commit comments

Comments
 (0)