@@ -2467,6 +2467,25 @@ def test_delete_slice(self):
2467
2467
self .assertEqual (result .name , expected .name )
2468
2468
self .assertEqual (result .freq , expected .freq )
2469
2469
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
+
2470
2489
def test_map_bug_1677 (self ):
2471
2490
index = DatetimeIndex (['2012-04-25 09:30:00.393000' ])
2472
2491
f = index .asof
@@ -3035,14 +3054,46 @@ def test_union(self):
3035
3054
self .assertEqual (df .index .values .dtype , np .dtype ('M8[ns]' ))
3036
3055
3037
3056
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 )
3046
3097
3047
3098
# empty same freq GH2129
3048
3099
rng = date_range ('6/1/2000' , '6/15/2000' , freq = 'T' )
@@ -3571,26 +3622,39 @@ def test_shift(self):
3571
3622
self .assertRaises (ValueError , idx .shift , 1 )
3572
3623
3573
3624
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 )
3594
3658
3595
3659
def test_min_max (self ):
3596
3660
rng = date_range ('1/1/2000' , '12/31/2000' )
0 commit comments