@@ -329,13 +329,18 @@ def _get_counts_nanvar(mask, axis, ddof):
329
329
return count , d
330
330
331
331
332
- @disallow ('M8' )
332
+ @disallow ('M8' , 'm8' )
333
333
@bottleneck_switch (ddof = 1 )
334
334
def nanvar (values , axis = None , skipna = True , ddof = 1 ):
335
- if not _is_floating_dtype (values ):
336
- values = values .astype ('f8' )
335
+
336
+ # we are going to allow timedelta64[ns] here
337
+ # but NOT going to coerce them to the Timedelta type
338
+ # as this could cause overflow
339
+ # so var cannot be computed (but std can!)
337
340
338
341
mask = isnull (values )
342
+ if not _is_floating_dtype (values ):
343
+ values = values .astype ('f8' )
339
344
340
345
count , d = _get_counts_nanvar (mask , axis , ddof )
341
346
@@ -347,13 +352,13 @@ def nanvar(values, axis=None, skipna=True, ddof=1):
347
352
XX = _ensure_numeric ((values ** 2 ).sum (axis ))
348
353
return np .fabs ((XX - X ** 2 / count ) / d )
349
354
350
-
355
+ @ disallow ( 'M8' , 'm8' )
351
356
def nansem (values , axis = None , skipna = True , ddof = 1 ):
352
357
var = nanvar (values , axis , skipna , ddof = ddof )
353
358
359
+ mask = isnull (values )
354
360
if not _is_floating_dtype (values ):
355
361
values = values .astype ('f8' )
356
- mask = isnull (values )
357
362
count , _ = _get_counts_nanvar (mask , axis , ddof )
358
363
359
364
return np .sqrt (var )/ np .sqrt (count )
@@ -442,12 +447,13 @@ def nanargmin(values, axis=None, skipna=True):
442
447
return result
443
448
444
449
445
- @disallow ('M8' )
450
+ @disallow ('M8' , 'm8' )
446
451
def nanskew (values , axis = None , skipna = True ):
452
+
453
+ mask = isnull (values )
447
454
if not _is_floating_dtype (values ):
448
455
values = values .astype ('f8' )
449
456
450
- mask = isnull (values )
451
457
count = _get_counts (mask , axis )
452
458
453
459
if skipna :
@@ -476,12 +482,13 @@ def nanskew(values, axis=None, skipna=True):
476
482
return result
477
483
478
484
479
- @disallow ('M8' )
485
+ @disallow ('M8' , 'm8' )
480
486
def nankurt (values , axis = None , skipna = True ):
487
+
488
+ mask = isnull (values )
481
489
if not _is_floating_dtype (values ):
482
490
values = values .astype ('f8' )
483
491
484
- mask = isnull (values )
485
492
count = _get_counts (mask , axis )
486
493
487
494
if skipna :
@@ -574,7 +581,7 @@ def _zero_out_fperr(arg):
574
581
return 0 if np .abs (arg ) < 1e-14 else arg
575
582
576
583
577
- @disallow ('M8' )
584
+ @disallow ('M8' , 'm8' )
578
585
def nancorr (a , b , method = 'pearson' , min_periods = None ):
579
586
"""
580
587
a, b: ndarrays
@@ -621,7 +628,7 @@ def _spearman(a, b):
621
628
return _cor_methods [method ]
622
629
623
630
624
- @disallow ('M8' )
631
+ @disallow ('M8' , 'm8' )
625
632
def nancov (a , b , min_periods = None ):
626
633
if len (a ) != len (b ):
627
634
raise AssertionError ('Operands to nancov must have same size' )
0 commit comments