@@ -2467,6 +2467,25 @@ def test_delete_slice(self):
24672467 self .assertEqual (result .name , expected .name )
24682468 self .assertEqual (result .freq , expected .freq )
24692469
2470+ def test_take (self ):
2471+ dates = [datetime (2010 , 1 , 6 ), datetime (2010 , 1 , 7 ),
2472+ datetime (2010 , 1 , 9 ), datetime (2010 , 1 , 13 )]
2473+
2474+ for tz in [None , 'US/Eastern' , 'Asia/Tokyo' ]:
2475+ idx = DatetimeIndex (start = '1/1/10' , end = '12/31/12' ,
2476+ freq = 'D' , tz = tz , name = 'idx' )
2477+ expected = DatetimeIndex (dates , freq = None , name = 'idx' , tz = tz )
2478+
2479+ taken1 = idx .take ([5 , 6 , 8 , 12 ])
2480+ taken2 = idx [[5 , 6 , 8 , 12 ]]
2481+
2482+ for taken in [taken1 , taken2 ]:
2483+ self .assertTrue (taken .equals (expected ))
2484+ tm .assert_isinstance (taken , DatetimeIndex )
2485+ self .assertIsNone (taken .freq )
2486+ self .assertEqual (taken .tz , expected .tz )
2487+ self .assertEqual (taken .name , expected .name )
2488+
24702489 def test_map_bug_1677 (self ):
24712490 index = DatetimeIndex (['2012-04-25 09:30:00.393000' ])
24722491 f = index .asof
@@ -3035,14 +3054,46 @@ def test_union(self):
30353054 self .assertEqual (df .index .values .dtype , np .dtype ('M8[ns]' ))
30363055
30373056 def test_intersection (self ):
3038- rng = date_range ('6/1/2000' , '6/15/2000' , freq = 'D' )
3039- rng = rng .delete (5 )
3040-
3041- rng2 = date_range ('5/15/2000' , '6/20/2000' , freq = 'D' )
3042- rng2 = DatetimeIndex (rng2 .values )
3043-
3044- result = rng .intersection (rng2 )
3045- self .assertTrue (result .equals (rng ))
3057+ # GH 4690 (with tz)
3058+ for tz in [None , 'Asia/Tokyo' ]:
3059+ rng = date_range ('6/1/2000' , '6/30/2000' , freq = 'D' , name = 'idx' )
3060+
3061+ # if target has the same name, it is preserved
3062+ rng2 = date_range ('5/15/2000' , '6/20/2000' , freq = 'D' , name = 'idx' )
3063+ expected2 = date_range ('6/1/2000' , '6/20/2000' , freq = 'D' , name = 'idx' )
3064+
3065+ # if target name is different, it will be reset
3066+ rng3 = date_range ('5/15/2000' , '6/20/2000' , freq = 'D' , name = 'other' )
3067+ expected3 = date_range ('6/1/2000' , '6/20/2000' , freq = 'D' , name = None )
3068+
3069+ result2 = rng .intersection (rng2 )
3070+ result3 = rng .intersection (rng3 )
3071+ for (result , expected ) in [(result2 , expected2 ), (result3 , expected3 )]:
3072+ self .assertTrue (result .equals (expected ))
3073+ self .assertEqual (result .name , expected .name )
3074+ self .assertEqual (result .freq , expected .freq )
3075+ self .assertEqual (result .tz , expected .tz )
3076+
3077+ # non-monotonic
3078+ rng = DatetimeIndex (['2011-01-05' , '2011-01-04' , '2011-01-02' , '2011-01-03' ],
3079+ tz = tz , name = 'idx' )
3080+
3081+ rng2 = DatetimeIndex (['2011-01-04' , '2011-01-02' , '2011-02-02' , '2011-02-03' ],
3082+ tz = tz , name = 'idx' )
3083+ expected2 = DatetimeIndex (['2011-01-04' , '2011-01-02' ], tz = tz , name = 'idx' )
3084+
3085+ rng3 = DatetimeIndex (['2011-01-04' , '2011-01-02' , '2011-02-02' , '2011-02-03' ],
3086+ tz = tz , name = 'other' )
3087+ expected3 = DatetimeIndex (['2011-01-04' , '2011-01-02' ], tz = tz , name = None )
3088+
3089+ result2 = rng .intersection (rng2 )
3090+ result3 = rng .intersection (rng3 )
3091+ for (result , expected ) in [(result2 , expected2 ), (result3 , expected3 )]:
3092+ print (result , expected )
3093+ self .assertTrue (result .equals (expected ))
3094+ self .assertEqual (result .name , expected .name )
3095+ self .assertIsNone (result .freq )
3096+ self .assertEqual (result .tz , expected .tz )
30463097
30473098 # empty same freq GH2129
30483099 rng = date_range ('6/1/2000' , '6/15/2000' , freq = 'T' )
@@ -3571,26 +3622,39 @@ def test_shift(self):
35713622 self .assertRaises (ValueError , idx .shift , 1 )
35723623
35733624 def test_setops_preserve_freq (self ):
3574- rng = date_range ('1/1/2000' , '1/1/2002' )
3575-
3576- result = rng [:50 ].union (rng [50 :100 ])
3577- self .assertEqual (result .freq , rng .freq )
3578-
3579- result = rng [:50 ].union (rng [30 :100 ])
3580- self .assertEqual (result .freq , rng .freq )
3581-
3582- result = rng [:50 ].union (rng [60 :100 ])
3583- self .assertIsNone (result .freq )
3584-
3585- result = rng [:50 ].intersection (rng [25 :75 ])
3586- self .assertEqual (result .freqstr , 'D' )
3587-
3588- nofreq = DatetimeIndex (list (rng [25 :75 ]))
3589- result = rng [:50 ].union (nofreq )
3590- self .assertEqual (result .freq , rng .freq )
3591-
3592- result = rng [:50 ].intersection (nofreq )
3593- self .assertEqual (result .freq , rng .freq )
3625+ for tz in [None , 'Asia/Tokyo' , 'US/Eastern' ]:
3626+ rng = date_range ('1/1/2000' , '1/1/2002' , name = 'idx' , tz = tz )
3627+
3628+ result = rng [:50 ].union (rng [50 :100 ])
3629+ self .assertEqual (result .name , rng .name )
3630+ self .assertEqual (result .freq , rng .freq )
3631+ self .assertEqual (result .tz , rng .tz )
3632+
3633+ result = rng [:50 ].union (rng [30 :100 ])
3634+ self .assertEqual (result .name , rng .name )
3635+ self .assertEqual (result .freq , rng .freq )
3636+ self .assertEqual (result .tz , rng .tz )
3637+
3638+ result = rng [:50 ].union (rng [60 :100 ])
3639+ self .assertEqual (result .name , rng .name )
3640+ self .assertIsNone (result .freq )
3641+ self .assertEqual (result .tz , rng .tz )
3642+
3643+ result = rng [:50 ].intersection (rng [25 :75 ])
3644+ self .assertEqual (result .name , rng .name )
3645+ self .assertEqual (result .freqstr , 'D' )
3646+ self .assertEqual (result .tz , rng .tz )
3647+
3648+ nofreq = DatetimeIndex (list (rng [25 :75 ]), name = 'other' )
3649+ result = rng [:50 ].union (nofreq )
3650+ self .assertIsNone (result .name )
3651+ self .assertEqual (result .freq , rng .freq )
3652+ self .assertEqual (result .tz , rng .tz )
3653+
3654+ result = rng [:50 ].intersection (nofreq )
3655+ self .assertIsNone (result .name )
3656+ self .assertEqual (result .freq , rng .freq )
3657+ self .assertEqual (result .tz , rng .tz )
35943658
35953659 def test_min_max (self ):
35963660 rng = date_range ('1/1/2000' , '12/31/2000' )
0 commit comments