@@ -528,26 +528,61 @@ def sdc_fillna_overload(self, inplace=False, value=None):
528528
529529 dtype = self .dtype
530530 isnan = get_isnan (dtype )
531+
531532 if (
532533 (isinstance (inplace , types .Literal ) and inplace .literal_value == True ) or # noqa
533534 (isinstance (inplace , bool ) and inplace == True ) # noqa
534535 ):
536+
537+ def sdc_fillna_inplace_noop (self , inplace = False , value = None ):
538+ return None
539+
540+ if isinstance (value , (types .NoneType , types .Omitted )) or value is None :
541+ return sdc_fillna_inplace_noop
542+
535543 if isinstance (dtype , (types .Integer , types .Boolean )):
536- def sdc_fillna_inplace_int_impl (self , inplace = False , value = None ):
544+ return sdc_fillna_inplace_noop
545+
546+ if isinstance (dtype , types .Float ):
547+ def sdc_fillna_inplace_float_impl (self , inplace = False , value = None ):
548+ _value = np .nan if value is None else value
549+ length = len (self )
550+ for i in prange (length ):
551+ if isnan (self [i ]):
552+ self [i ] = _value
537553 return None
538554
539- return sdc_fillna_inplace_int_impl
555+ return sdc_fillna_inplace_float_impl
540556
541- def sdc_fillna_inplace_float_impl (self , inplace = False , value = None ):
542- length = len (self )
543- for i in prange (length ):
544- if isnan (self [i ]):
545- self [i ] = value
557+ if isinstance (dtype , types .UnicodeType ):
558+ # TO-DO: not supported, since no generic setitem for StringArray
546559 return None
547560
548- return sdc_fillna_inplace_float_impl
549-
550561 else :
562+
563+ def sdc_fillna_noop (self , inplace = False , value = None ):
564+ return copy (self )
565+
566+ if isinstance (value , (types .NoneType , types .Omitted )) or value is None :
567+ return sdc_fillna_noop
568+
569+ if isinstance (dtype , (types .Integer , types .Boolean )):
570+ return sdc_fillna_noop
571+
572+ if isinstance (dtype , types .Float ):
573+ def sdc_fillna_impl (self , inplace = False , value = None ):
574+ _value = np .nan if value is None else value
575+ length = len (self )
576+ filled_data = numpy .empty (length , dtype = dtype )
577+ for i in prange (length ):
578+ if isnan (self [i ]):
579+ filled_data [i ] = _value
580+ else :
581+ filled_data [i ] = self [i ]
582+ return filled_data
583+
584+ return sdc_fillna_impl
585+
551586 if isinstance (self .dtype , types .UnicodeType ):
552587 def sdc_fillna_str_impl (self , inplace = False , value = None ):
553588 n = len (self )
@@ -556,9 +591,9 @@ def sdc_fillna_str_impl(self, inplace=False, value=None):
556591 for i in prange (n ):
557592 s = self [i ]
558593 if sdc .hiframes .api .isna (self , i ):
559- num_chars += len (value )
594+ num_chars += get_utf8_size (value )
560595 else :
561- num_chars += len (s )
596+ num_chars += get_utf8_size (s )
562597
563598 filled_data = pre_alloc_string_array (n , num_chars )
564599 for i in prange (n ):
@@ -570,24 +605,6 @@ def sdc_fillna_str_impl(self, inplace=False, value=None):
570605
571606 return sdc_fillna_str_impl
572607
573- if isinstance (dtype , (types .Integer , types .Boolean )):
574- def sdc_fillna_int_impl (self , inplace = False , value = None ):
575- return copy (self )
576-
577- return sdc_fillna_int_impl
578-
579- def sdc_fillna_impl (self , inplace = False , value = None ):
580- length = len (self )
581- filled_data = numpy .empty (length , dtype = dtype )
582- for i in prange (length ):
583- if isnan (self [i ]):
584- filled_data [i ] = value
585- else :
586- filled_data [i ] = self [i ]
587- return filled_data
588-
589- return sdc_fillna_impl
590-
591608
592609def nanmin (a ):
593610 pass
0 commit comments