@@ -251,51 +251,35 @@ def fillna(self, value=None, method=None, limit=None):
251251        """ 
252252        from  pandas .api .types  import  is_scalar 
253253        from  pandas .util ._validators  import  validate_fillna_kwargs 
254+         from  pandas .core .missing  import  pad_1d , backfill_1d 
254255
255256        value , method  =  validate_fillna_kwargs (value , method )
256257
258+         mask  =  self .isna ()
259+ 
257260        if  not  is_scalar (value ):
258261            if  len (value ) !=  len (self ):
259262                raise  ValueError ("Length of 'value' does not match. Got ({}) " 
260263                                 " expected {}" .format (len (value ), len (self )))
261-         else :
262-             value  =  itertools .cycle ([value ])
264+             value  =  value [mask ]
263265
264266        if  limit  is  not   None :
265267            msg  =  ("Specifying 'limit' for 'fillna' has not been implemented " 
266268                   "yet for {} typed data" .format (self .dtype ))
267269            raise  NotImplementedError (msg )
268270
269-         mask  =  self .isna ()
270- 
271271        if  mask .any ():
272272            # ffill / bfill 
273-             if  method  is  not   None :
274-                 if  method  ==  'backfill' :
275-                     data  =  reversed (self )
276-                     mask  =  reversed (mask )
277-                     last_valid  =  self [len (self ) -  1 ]
278-                 else :
279-                     last_valid  =  self [0 ]
280-                     data  =  self 
281- 
282-                 new_values  =  []
283- 
284-                 for  is_na , val  in  zip (mask , data ):
285-                     if  is_na :
286-                         new_values .append (last_valid )
287-                     else :
288-                         new_values .append (val )
289-                         last_valid  =  val 
290- 
291-                 if  method  in  {'bfill' , 'backfill' }:
292-                     new_values  =  list (reversed (new_values ))
273+             if  method  ==  'pad' :
274+                 values  =  self .astype (object )
275+                 new_values  =  pad_1d (values , mask = mask )
276+             elif  method  ==  'backfill' :
277+                 values  =  self .astype (object )
278+                 new_values  =  backfill_1d (values , mask = mask )
293279            else :
294280                # fill with value 
295-                 new_values  =  [
296-                     val  if  is_na  else  original 
297-                     for  is_na , original , val  in  zip (mask , self , value )
298-                 ]
281+                 new_values  =  self .copy ()
282+                 new_values [mask ] =  value 
299283        else :
300284            new_values  =  self 
301285        return  type (self )(new_values )
0 commit comments