Skip to content

Commit 069f144

Browse files
committed
Merge pull request #7302 from sinhrks/delete
BUG: Index.delete doesnt preserve name and other attrs
2 parents c9b4152 + 5bc5220 commit 069f144

File tree

5 files changed

+50
-14
lines changed

5 files changed

+50
-14
lines changed

doc/source/v0.14.1.txt

+1
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,4 @@ Bug Fixes
7070
- Bug in ``DataFrame`` and ``Series`` bar and barh plot raises ``TypeError`` when ``bottom``
7171
and ``left`` keyword is specified (:issue:`7226`)
7272
- BUG in ``DataFrame.hist`` raises ``TypeError`` when it contains non numeric column (:issue:`7277`)
73+
- BUG in ``Index.delete`` does not preserve ``name`` and ``freq`` attributes (:issue:`7302`)

pandas/core/index.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -1770,7 +1770,9 @@ def delete(self, loc):
17701770
-------
17711771
new_index : Index
17721772
"""
1773-
return np.delete(self, loc)
1773+
return self._simple_new(np.delete(self, loc), self.name,
1774+
freq=getattr(self, 'freq', None),
1775+
tz=getattr(self, 'tz', None))
17741776

17751777
def insert(self, loc, item):
17761778
"""

pandas/tests/test_index.py

+17
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,23 @@ def test_insert(self):
265265
self.assertTrue(Index(['a']).equals(
266266
null_index.insert(0, 'a')))
267267

268+
def test_delete(self):
269+
idx = Index(['a', 'b', 'c', 'd'], name='idx')
270+
271+
expected = Index(['b', 'c', 'd'], name='idx')
272+
result = idx.delete(0)
273+
self.assertTrue(result.equals(expected))
274+
self.assertEqual(result.name, expected.name)
275+
276+
expected = Index(['a', 'b', 'c'], name='idx')
277+
result = idx.delete(-1)
278+
self.assertTrue(result.equals(expected))
279+
self.assertEqual(result.name, expected.name)
280+
281+
with tm.assertRaises((IndexError, ValueError)):
282+
# either depeidnig on numpy version
283+
result = idx.delete(5)
284+
268285
def test_identical(self):
269286

270287
# index

pandas/tseries/index.py

-11
Original file line numberDiff line numberDiff line change
@@ -1608,17 +1608,6 @@ def insert(self, loc, item):
16081608
return self.asobject.insert(loc, item)
16091609
raise TypeError("cannot insert DatetimeIndex with incompatible label")
16101610

1611-
def delete(self, loc):
1612-
"""
1613-
Make new DatetimeIndex with passed location deleted
1614-
1615-
Returns
1616-
-------
1617-
new_index : DatetimeIndex
1618-
"""
1619-
arr = np.delete(self.values, loc)
1620-
return DatetimeIndex(arr, tz=self.tz)
1621-
16221611
def _view_like(self, ndarray):
16231612
result = ndarray.view(type(self))
16241613
result.offset = self.offset

pandas/tseries/tests/test_timeseries.py

+29-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
import os
55
import operator
66

7-
from distutils.version import LooseVersion
8-
97
import nose
108

119
import numpy as np
@@ -2094,6 +2092,35 @@ def test_insert(self):
20942092
result = idx.insert(3, datetime(2000, 4, 30))
20952093
self.assertEqual(result.freqstr, 'M')
20962094

2095+
def test_delete(self):
2096+
idx = date_range(start='2000-01-01', periods=4, freq='M', name='idx')
2097+
2098+
expected = date_range(start='2000-02-01', periods=3, freq='M', name='idx')
2099+
result = idx.delete(0)
2100+
self.assertTrue(result.equals(expected))
2101+
self.assertEqual(result.name, expected.name)
2102+
self.assertEqual(result.freqstr, 'M')
2103+
2104+
expected = date_range(start='2000-01-01', periods=3, freq='M', name='idx')
2105+
result = idx.delete(-1)
2106+
self.assertTrue(result.equals(expected))
2107+
self.assertEqual(result.name, expected.name)
2108+
self.assertEqual(result.freqstr, 'M')
2109+
2110+
with tm.assertRaises((IndexError, ValueError)):
2111+
# either depeidnig on numpy version
2112+
result = idx.delete(5)
2113+
2114+
idx = date_range(start='2000-01-01', periods=4,
2115+
freq='M', name='idx', tz='US/Pacific')
2116+
2117+
expected = date_range(start='2000-02-01', periods=3,
2118+
freq='M', name='idx', tz='US/Pacific')
2119+
result = idx.delete(0)
2120+
self.assertTrue(result.equals(expected))
2121+
self.assertEqual(result.name, expected.name)
2122+
self.assertEqual(result.freqstr, 'M')
2123+
20972124
def test_map_bug_1677(self):
20982125
index = DatetimeIndex(['2012-04-25 09:30:00.393000'])
20992126
f = index.asof

0 commit comments

Comments
 (0)