@@ -105,12 +105,10 @@ def test_cut_corner(self):
105
105
pytest .raises (ValueError , cut , [1 , 2 , 3 ], 0.5 )
106
106
107
107
@pytest .mark .parametrize ('arg' , [2 , np .eye (2 ), DataFrame (np .eye (2 ))])
108
- @pytest .mark .parametrize ('bins' , [2 , np .array (2 ), np .arange (1 , 2 ), [1 , 2 ],
109
- Series ([1 , 2 ]), Index ([1 , 2 ])])
110
108
@pytest .mark .parametrize ('cut_func' , [cut , qcut ])
111
- def test_cut_not_1d_arg (self , arg , bins , cut_func ):
109
+ def test_cut_not_1d_arg (self , arg , cut_func ):
112
110
with pytest .raises (ValueError ):
113
- cut_func (arg , bins )
111
+ cut_func (arg , 2 )
114
112
115
113
def test_cut_out_of_range_more (self ):
116
114
# #1511
@@ -259,18 +257,6 @@ def test_qcut_nas(self):
259
257
result = qcut (arr , 4 )
260
258
assert isna (result [:20 ]).all ()
261
259
262
- @pytest .mark .parametrize ('s' , [
263
- Series (DatetimeIndex (['20180101' , NaT , '20180103' ])),
264
- Series (TimedeltaIndex (['0 days' , NaT , '2 days' ]))],
265
- ids = lambda x : str (x .dtype ))
266
- def test_qcut_nat (self , s ):
267
- # GH 19768
268
- intervals = IntervalIndex .from_tuples (
269
- [(s [0 ] - Nano (), s [2 ] - Day ()), np .nan , (s [2 ] - Day (), s [2 ])])
270
- expected = Series (Categorical (intervals , ordered = True ))
271
- result = qcut (s , 2 )
272
- tm .assert_series_equal (result , expected )
273
-
274
260
def test_qcut_index (self ):
275
261
result = qcut ([0 , 2 ], 2 )
276
262
intervals = [Interval (- 0.001 , 1 ), Interval (1 , 2 )]
@@ -460,6 +446,37 @@ def test_single_bin(self):
460
446
result = cut (s , 1 , labels = False )
461
447
tm .assert_series_equal (result , expected )
462
448
449
+ @pytest .mark .parametrize (
450
+ "array_1_writeable, array_2_writeable" ,
451
+ [(True , True ), (True , False ), (False , False )])
452
+ def test_cut_read_only (self , array_1_writeable , array_2_writeable ):
453
+ # issue 18773
454
+ array_1 = np .arange (0 , 100 , 10 )
455
+ array_1 .flags .writeable = array_1_writeable
456
+
457
+ array_2 = np .arange (0 , 100 , 10 )
458
+ array_2 .flags .writeable = array_2_writeable
459
+
460
+ hundred_elements = np .arange (100 )
461
+
462
+ tm .assert_categorical_equal (cut (hundred_elements , array_1 ),
463
+ cut (hundred_elements , array_2 ))
464
+
465
+
466
+ class TestDatelike (object ):
467
+
468
+ @pytest .mark .parametrize ('s' , [
469
+ Series (DatetimeIndex (['20180101' , NaT , '20180103' ])),
470
+ Series (TimedeltaIndex (['0 days' , NaT , '2 days' ]))],
471
+ ids = lambda x : str (x .dtype ))
472
+ def test_qcut_nat (self , s ):
473
+ # GH 19768
474
+ intervals = IntervalIndex .from_tuples (
475
+ [(s [0 ] - Nano (), s [2 ] - Day ()), np .nan , (s [2 ] - Day (), s [2 ])])
476
+ expected = Series (Categorical (intervals , ordered = True ))
477
+ result = qcut (s , 2 )
478
+ tm .assert_series_equal (result , expected )
479
+
463
480
def test_datetime_cut (self ):
464
481
# GH 14714
465
482
# testing for time data to be present as series
@@ -496,11 +513,19 @@ def test_datetime_cut(self):
496
513
result , bins = cut (data , 3 , retbins = True )
497
514
tm .assert_series_equal (Series (result ), expected )
498
515
499
- def test_datetimetz_cut (self ):
516
+ @pytest .mark .parametrize ('bins' , [
517
+ 3 , [Timestamp ('2013-01-01 04:57:07.200000' ).value ,
518
+ Timestamp ('2013-01-01 21:00:00' ).value ,
519
+ Timestamp ('2013-01-02 13:00:00' ).value ,
520
+ Timestamp ('2013-01-03 05:00:00' ).value ]])
521
+ @pytest .mark .parametrize ('const' , [list , np .array , Index , Series ])
522
+ def test_datetimetz_cut (self , bins , const ):
500
523
# GH 19872
501
524
tz = 'US/Eastern'
502
525
s = Series (date_range ('20130101' , periods = 3 , tz = tz ))
503
- result = cut (s , 3 )
526
+ if not isinstance (bins , int ):
527
+ bins = const (bins )
528
+ result = cut (s , bins )
504
529
expected = (
505
530
Series (IntervalIndex ([
506
531
Interval (Timestamp ('2012-12-31 23:57:07.200000' , tz = tz ),
@@ -512,7 +537,12 @@ def test_datetimetz_cut(self):
512
537
.astype (CDT (ordered = True )))
513
538
tm .assert_series_equal (result , expected )
514
539
515
- result = qcut (s , 3 )
540
+ @pytest .mark .parametrize ('bins' , [3 , np .linspace (0 , 1 , 4 )])
541
+ def test_datetimetz_qcut (self , bins ):
542
+ # GH 19872
543
+ tz = 'US/Eastern'
544
+ s = Series (date_range ('20130101' , periods = 3 , tz = tz ))
545
+ result = qcut (s , bins )
516
546
expected = (
517
547
Series (IntervalIndex ([
518
548
Interval (Timestamp ('2012-12-31 23:59:59.999999999' , tz = tz ),
@@ -559,19 +589,3 @@ def f():
559
589
mask = result .isna ()
560
590
tm .assert_numpy_array_equal (
561
591
mask , np .array ([False , True , True , True , True ]))
562
-
563
- @pytest .mark .parametrize (
564
- "array_1_writeable, array_2_writeable" ,
565
- [(True , True ), (True , False ), (False , False )])
566
- def test_cut_read_only (self , array_1_writeable , array_2_writeable ):
567
- # issue 18773
568
- array_1 = np .arange (0 , 100 , 10 )
569
- array_1 .flags .writeable = array_1_writeable
570
-
571
- array_2 = np .arange (0 , 100 , 10 )
572
- array_2 .flags .writeable = array_2_writeable
573
-
574
- hundred_elements = np .arange (100 )
575
-
576
- tm .assert_categorical_equal (cut (hundred_elements , array_1 ),
577
- cut (hundred_elements , array_2 ))
0 commit comments