@@ -130,10 +130,15 @@ def get_duplicates(self):
130130 values = Index .get_duplicates (self )
131131 return self ._simple_new (values )
132132
133+ @cache_readonly
134+ def _isnan (self ):
135+ """ return if each value is nan"""
136+ return (self .asi8 == tslib .iNaT )
137+
133138 @cache_readonly
134139 def hasnans (self ):
135140 """ return if I have any nans; enables various perf speedups """
136- return ( self .asi8 == tslib . iNaT ) .any ()
141+ return self ._isnan .any ()
137142
138143 @property
139144 def asobject (self ):
@@ -157,12 +162,11 @@ def _maybe_mask_results(self, result, fill_value=None, convert=None):
157162 """
158163
159164 if self .hasnans :
160- mask = self .asi8 == tslib .iNaT
161165 if convert :
162166 result = result .astype (convert )
163167 if fill_value is None :
164168 fill_value = np .nan
165- result [mask ] = fill_value
169+ result [self . _isnan ] = fill_value
166170 return result
167171
168172 def tolist (self ):
@@ -188,8 +192,7 @@ def min(self, axis=None):
188192 return self ._box_func (i8 [0 ])
189193
190194 if self .hasnans :
191- mask = i8 == tslib .iNaT
192- min_stamp = self [~ mask ].asi8 .min ()
195+ min_stamp = self [~ self ._isnan ].asi8 .min ()
193196 else :
194197 min_stamp = i8 .min ()
195198 return self ._box_func (min_stamp )
@@ -207,7 +210,7 @@ def argmin(self, axis=None):
207210
208211 i8 = self .asi8
209212 if self .hasnans :
210- mask = i8 == tslib . iNaT
213+ mask = self . _isnan
211214 if mask .all ():
212215 return - 1
213216 i8 = i8 .copy ()
@@ -231,8 +234,7 @@ def max(self, axis=None):
231234 return self ._box_func (i8 [- 1 ])
232235
233236 if self .hasnans :
234- mask = i8 == tslib .iNaT
235- max_stamp = self [~ mask ].asi8 .max ()
237+ max_stamp = self [~ self ._isnan ].asi8 .max ()
236238 else :
237239 max_stamp = i8 .max ()
238240 return self ._box_func (max_stamp )
@@ -250,7 +252,7 @@ def argmax(self, axis=None):
250252
251253 i8 = self .asi8
252254 if self .hasnans :
253- mask = i8 == tslib . iNaT
255+ mask = self . _isnan
254256 if mask .all ():
255257 return - 1
256258 i8 = i8 .copy ()
@@ -381,9 +383,8 @@ def _add_delta_td(self, other):
381383 # return the i8 result view
382384
383385 inc = tslib ._delta_to_nanoseconds (other )
384- mask = self .asi8 == tslib .iNaT
385386 new_values = (self .asi8 + inc ).view (self .dtype )
386- new_values [mask ] = tslib .iNaT
387+ new_values [self . _isnan ] = tslib .iNaT
387388 return new_values .view (self .dtype )
388389
389390 def _add_delta_tdi (self , other ):
@@ -396,7 +397,7 @@ def _add_delta_tdi(self, other):
396397
397398 self_i8 = self .asi8
398399 other_i8 = other .asi8
399- mask = (self_i8 == tslib . iNaT ) | (other_i8 == tslib . iNaT )
400+ mask = (self . _isnan ) | (other . _isnan )
400401 new_values = self_i8 + other_i8
401402 new_values [mask ] = tslib .iNaT
402403 return new_values .view (self .dtype )
0 commit comments