@@ -2293,24 +2293,101 @@ def test_order(self):
2293
2293
self .assertTrue (ordered [::- 1 ].is_monotonic )
2294
2294
self .assert_numpy_array_equal (dexer , [0 , 2 , 1 ])
2295
2295
2296
+ def test_asobject (self ):
2297
+ idx = date_range (start = '2013-01-01' , periods = 4 , freq = 'M' , name = 'idx' )
2298
+ expected = Index ([Timestamp ('2013-01-31' ), Timestamp ('2013-02-28' ),
2299
+ Timestamp ('2013-03-31' ), Timestamp ('2013-04-30' )],
2300
+ dtype = object , name = 'idx' )
2301
+
2302
+ result = idx .asobject
2303
+ self .assertTrue (result .equals (expected ))
2304
+ self .assertEqual (result .name , expected .name )
2305
+
2296
2306
def test_insert (self ):
2297
- idx = DatetimeIndex (['2000-01-04' , '2000-01-01' , '2000-01-02' ])
2307
+ idx = DatetimeIndex (['2000-01-04' , '2000-01-01' , '2000-01-02' ], name = 'idx' )
2298
2308
2299
2309
result = idx .insert (2 , datetime (2000 , 1 , 5 ))
2300
2310
exp = DatetimeIndex (['2000-01-04' , '2000-01-01' , '2000-01-05' ,
2301
- '2000-01-02' ])
2311
+ '2000-01-02' ], name = 'idx' )
2302
2312
self .assertTrue (result .equals (exp ))
2303
2313
2304
2314
# insertion of non-datetime should coerce to object index
2305
2315
result = idx .insert (1 , 'inserted' )
2306
2316
expected = Index ([datetime (2000 , 1 , 4 ), 'inserted' , datetime (2000 , 1 , 1 ),
2307
- datetime (2000 , 1 , 2 )])
2317
+ datetime (2000 , 1 , 2 )], name = 'idx' )
2308
2318
self .assertNotIsInstance (result , DatetimeIndex )
2309
2319
tm .assert_index_equal (result , expected )
2320
+ self .assertEqual (result .name , expected .name )
2321
+
2322
+ idx = date_range ('1/1/2000' , periods = 3 , freq = 'M' , name = 'idx' )
2323
+
2324
+ # preserve freq
2325
+ expected_0 = DatetimeIndex (['1999-12-31' , '2000-01-31' , '2000-02-29' ,
2326
+ '2000-03-31' ], name = 'idx' , freq = 'M' )
2327
+ expected_3 = DatetimeIndex (['2000-01-31' , '2000-02-29' , '2000-03-31' ,
2328
+ '2000-04-30' ], name = 'idx' , freq = 'M' )
2329
+
2330
+ # reset freq to None
2331
+ expected_1_nofreq = DatetimeIndex (['2000-01-31' , '2000-01-31' , '2000-02-29' ,
2332
+ '2000-03-31' ], name = 'idx' , freq = None )
2333
+ expected_3_nofreq = DatetimeIndex (['2000-01-31' , '2000-02-29' , '2000-03-31' ,
2334
+ '2000-01-02' ], name = 'idx' , freq = None )
2335
+
2336
+ cases = [(0 , datetime (1999 , 12 , 31 ), expected_0 ),
2337
+ (- 3 , datetime (1999 , 12 , 31 ), expected_0 ),
2338
+ (3 , datetime (2000 , 4 , 30 ), expected_3 ),
2339
+ (1 , datetime (2000 , 1 , 31 ), expected_1_nofreq ),
2340
+ (3 , datetime (2000 , 1 , 2 ), expected_3_nofreq )]
2341
+
2342
+ for n , d , expected in cases :
2343
+ result = idx .insert (n , d )
2344
+ self .assertTrue (result .equals (expected ))
2345
+ self .assertEqual (result .name , expected .name )
2346
+ self .assertEqual (result .freq , expected .freq )
2347
+
2348
+ # reset freq to None
2349
+ result = idx .insert (3 , datetime (2000 , 1 , 2 ))
2350
+ expected = DatetimeIndex (['2000-01-31' , '2000-02-29' , '2000-03-31' ,
2351
+ '2000-01-02' ], name = 'idx' , freq = None )
2352
+ self .assertTrue (result .equals (expected ))
2353
+ self .assertEqual (result .name , expected .name )
2354
+ self .assertTrue (result .freq is None )
2355
+
2356
+ # GH 7299
2357
+ _skip_if_no_pytz ()
2358
+ import pytz
2359
+
2360
+ idx = date_range ('1/1/2000' , periods = 3 , freq = 'D' , tz = 'Asia/Tokyo' , name = 'idx' )
2361
+ with tm .assertRaises (ValueError ):
2362
+ result = idx .insert (3 , pd .Timestamp ('2000-01-04' ))
2363
+ with tm .assertRaises (ValueError ):
2364
+ result = idx .insert (3 , datetime (2000 , 1 , 4 ))
2365
+ with tm .assertRaises (ValueError ):
2366
+ result = idx .insert (3 , pd .Timestamp ('2000-01-04' , tz = 'US/Eastern' ))
2367
+ with tm .assertRaises (ValueError ):
2368
+ result = idx .insert (3 , datetime (2000 , 1 , 4 , tzinfo = pytz .timezone ('US/Eastern' )))
2369
+
2370
+ # preserve freq
2371
+ expected = date_range ('1/1/2000' , periods = 4 , freq = 'D' , tz = 'Asia/Tokyo' , name = 'idx' )
2372
+ for d in [pd .Timestamp ('2000-01-04' , tz = 'Asia/Tokyo' ),
2373
+ datetime (2000 , 1 , 4 , tzinfo = pytz .timezone ('Asia/Tokyo' ))]:
2374
+
2375
+ result = idx .insert (3 , d )
2376
+ self .assertTrue (result .equals (expected ))
2377
+ self .assertEqual (result .name , expected .name )
2378
+ self .assertEqual (result .freqstr , expected .freq )
2379
+
2380
+ expected = DatetimeIndex (['2000-01-01' , '2000-01-02' , '2000-01-03' ,
2381
+ '2000-01-02' ], name = 'idx' ,
2382
+ tz = 'Asia/Tokyo' , freq = None )
2383
+ # reset freq to None
2384
+ for d in [pd .Timestamp ('2000-01-02' , tz = 'Asia/Tokyo' ),
2385
+ datetime (2000 , 1 , 2 , tzinfo = pytz .timezone ('Asia/Tokyo' ))]:
2386
+ result = idx .insert (3 , d )
2387
+ self .assertTrue (result .equals (expected ))
2388
+ self .assertEqual (result .name , expected .name )
2389
+ self .assertTrue (result .freq is None )
2310
2390
2311
- idx = date_range ('1/1/2000' , periods = 3 , freq = 'M' )
2312
- result = idx .insert (3 , datetime (2000 , 4 , 30 ))
2313
- self .assertEqual (result .freqstr , 'M' )
2314
2391
2315
2392
def test_delete (self ):
2316
2393
idx = date_range (start = '2000-01-01' , periods = 5 , freq = 'M' , name = 'idx' )
0 commit comments