Skip to content

Commit d91d145

Browse files
committed
Revert "BUG: DatetimeIndes.insert doesnt preserve name and tz"
This reverts commit e22c856.
1 parent 8a07b6f commit d91d145

File tree

3 files changed

+14
-108
lines changed

3 files changed

+14
-108
lines changed

doc/source/v0.14.1.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,5 +123,3 @@ Bug Fixes
123123
- Bug where a string column name assignment to a ``DataFrame`` with a
124124
``Float64Index`` raised a ``TypeError`` during a call to ``np.isnan``
125125
(:issue:`7366`).
126-
- BUG in ``DatetimeIndex.insert`` doesn't preserve ``name`` and ``tz`` (:issue:`7299`)
127-
- BUG in ``DatetimeIndex.asobject`` doesn't preserve ``name`` (:issue:`7299`)

pandas/tseries/index.py

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -784,7 +784,7 @@ def tolist(self):
784784
def _get_object_index(self):
785785
boxfunc = lambda x: Timestamp(x, offset=self.offset, tz=self.tz)
786786
boxed_values = lib.map_infer(self.asi8, boxfunc)
787-
return Index(boxed_values, dtype=object, name=self.name)
787+
return Index(boxed_values, dtype=object)
788788

789789
def to_pydatetime(self):
790790
"""
@@ -1594,30 +1594,15 @@ def insert(self, loc, item):
15941594
-------
15951595
new_index : Index
15961596
"""
1597-
freq = None
15981597
if isinstance(item, datetime):
1599-
zone = tslib.get_timezone(self.tz)
1600-
izone = tslib.get_timezone(getattr(item, 'tzinfo', None))
1601-
if zone != izone:
1602-
raise ValueError('Passed item and index have different timezone')
1603-
1604-
# check freq can be preserved on edge cases
1605-
if self.freq is not None:
1606-
if (loc == 0 or loc == -len(self)) and item + self.freq == self[0]:
1607-
freq = self.freq
1608-
elif (loc == len(self)) and item - self.freq == self[-1]:
1609-
freq = self.freq
1610-
16111598
item = _to_m8(item, tz=self.tz)
1612-
16131599
try:
1614-
new_dates = np.concatenate((self[:loc].asi8, [item.view(np.int64)],
1615-
self[loc:].asi8))
1616-
if self.tz is not None:
1617-
new_dates = tslib.date_normalize(new_dates, self.tz)
1618-
return DatetimeIndex(new_dates, name=self.name, freq=freq, tz=self.tz)
1619-
1600+
new_index = np.concatenate((self[:loc].asi8,
1601+
[item.view(np.int64)],
1602+
self[loc:].asi8))
1603+
return DatetimeIndex(new_index, freq='infer')
16201604
except (AttributeError, TypeError):
1605+
16211606
# fall back to object index
16221607
if isinstance(item,compat.string_types):
16231608
return self.asobject.insert(loc, item)

pandas/tseries/tests/test_timeseries.py

Lines changed: 8 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -2273,101 +2273,24 @@ def test_order(self):
22732273
self.assertTrue(ordered[::-1].is_monotonic)
22742274
self.assert_numpy_array_equal(dexer, [0, 2, 1])
22752275

2276-
def test_asobject(self):
2277-
idx = date_range(start='2013-01-01', periods=4, freq='M', name='idx')
2278-
expected = Index([Timestamp('2013-01-31'), Timestamp('2013-02-28'),
2279-
Timestamp('2013-03-31'), Timestamp('2013-04-30')],
2280-
dtype=object, name='idx')
2281-
2282-
result = idx.asobject
2283-
self.assertTrue(result.equals(expected))
2284-
self.assertEqual(result.name, expected.name)
2285-
22862276
def test_insert(self):
2287-
idx = DatetimeIndex(['2000-01-04', '2000-01-01', '2000-01-02'], name='idx')
2277+
idx = DatetimeIndex(['2000-01-04', '2000-01-01', '2000-01-02'])
22882278

22892279
result = idx.insert(2, datetime(2000, 1, 5))
2290-
expected = DatetimeIndex(['2000-01-04', '2000-01-01', '2000-01-05',
2291-
'2000-01-02'], name='idx')
2292-
self.assertTrue(result.equals(expected))
2293-
self.assertEqual(result.name, expected.name)
2280+
exp = DatetimeIndex(['2000-01-04', '2000-01-01', '2000-01-05',
2281+
'2000-01-02'])
2282+
self.assertTrue(result.equals(exp))
22942283

22952284
# insertion of non-datetime should coerce to object index
22962285
result = idx.insert(1, 'inserted')
22972286
expected = Index([datetime(2000, 1, 4), 'inserted', datetime(2000, 1, 1),
2298-
datetime(2000, 1, 2)], name='idx')
2287+
datetime(2000, 1, 2)])
22992288
self.assertNotIsInstance(result, DatetimeIndex)
23002289
tm.assert_index_equal(result, expected)
2301-
self.assertEqual(result.name, expected.name)
2302-
2303-
idx = date_range('1/1/2000', periods=3, freq='M', name='idx')
2304-
2305-
# preserve freq
2306-
expected_0 = DatetimeIndex(['1999-12-31', '2000-01-31', '2000-02-29',
2307-
'2000-03-31'], name='idx', freq='M')
2308-
expected_3 = DatetimeIndex(['2000-01-31', '2000-02-29', '2000-03-31',
2309-
'2000-04-30'], name='idx', freq='M')
2310-
2311-
# reset freq to None
2312-
expected_1_nofreq = DatetimeIndex(['2000-01-31', '2000-01-31', '2000-02-29',
2313-
'2000-03-31'], name='idx', freq=None)
2314-
expected_3_nofreq = DatetimeIndex(['2000-01-31', '2000-02-29', '2000-03-31',
2315-
'2000-01-02'], name='idx', freq=None)
2316-
2317-
cases = [(0, datetime(1999, 12, 31), expected_0),
2318-
(-3, datetime(1999, 12, 31), expected_0),
2319-
(3, datetime(2000, 4, 30), expected_3),
2320-
(1, datetime(2000, 1, 31), expected_1_nofreq),
2321-
(3, datetime(2000, 1, 2), expected_3_nofreq)]
2322-
2323-
for n, d, expected in cases:
2324-
result = idx.insert(n, d)
2325-
self.assertTrue(result.equals(expected))
2326-
self.assertEqual(result.name, expected.name)
2327-
self.assertEqual(result.freq, expected.freq)
23282290

2329-
# reset freq to None
2330-
result = idx.insert(3, datetime(2000, 1, 2))
2331-
expected = DatetimeIndex(['2000-01-31', '2000-02-29', '2000-03-31',
2332-
'2000-01-02'], name='idx', freq=None)
2333-
self.assertTrue(result.equals(expected))
2334-
self.assertEqual(result.name, expected.name)
2335-
self.assertTrue(result.freq is None)
2336-
2337-
# GH 7299
2338-
_skip_if_no_pytz()
2339-
import pytz
2340-
2341-
idx = date_range('1/1/2000', periods=3, freq='D', tz='US/Pacific', name='idx')
2342-
with tm.assertRaises(ValueError):
2343-
result = idx.insert(3, pd.Timestamp('2000-01-04'))
2344-
with tm.assertRaises(ValueError):
2345-
result = idx.insert(3, datetime(2000, 1, 4))
2346-
with tm.assertRaises(ValueError):
2347-
result = idx.insert(3, pd.Timestamp('2000-01-04', tz='US/Eastern'))
2348-
with tm.assertRaises(ValueError):
2349-
result = idx.insert(3, datetime(2000, 1, 4, tzinfo=pytz.timezone('US/Eastern')))
2350-
2351-
# preserve freq
2352-
expected = date_range('1/1/2000', periods=4, freq='D', tz='US/Pacific', name='idx')
2353-
for d in [pd.Timestamp('2000-01-04', tz='US/Pacific'),
2354-
datetime(2000, 1, 4, tzinfo=pytz.timezone('US/Pacific'))]:
2355-
2356-
result = idx.insert(3, d)
2357-
self.assertTrue(result.equals(expected))
2358-
self.assertEqual(result.name, expected.name)
2359-
self.assertEqual(result.freqstr, 'D')
2360-
2361-
expected = DatetimeIndex(['2000-01-01', '2000-01-02', '2000-01-03',
2362-
'2000-01-02'], name='idx',
2363-
tz='US/Pacific', freq=None)
2364-
# reset freq to None
2365-
for d in [pd.Timestamp('2000-01-02', tz='US/Pacific'),
2366-
datetime(2000, 1, 2, tzinfo=pytz.timezone('US/Pacific'))]:
2367-
result = idx.insert(3, d)
2368-
self.assertTrue(result.equals(expected))
2369-
self.assertEqual(result.name, expected.name)
2370-
self.assertTrue(result.freq is None)
2291+
idx = date_range('1/1/2000', periods=3, freq='M')
2292+
result = idx.insert(3, datetime(2000, 4, 30))
2293+
self.assertEqual(result.freqstr, 'M')
23712294

23722295
def test_delete(self):
23732296
idx = date_range(start='2000-01-01', periods=5, freq='M', name='idx')

0 commit comments

Comments
 (0)