@@ -299,7 +299,7 @@ def str_upper(arr):
299
299
return _na_map (lambda x : x .upper (), arr )
300
300
301
301
302
- def str_replace (arr , pat , repl , n = 0 , case = True , flags = 0 ):
302
+ def str_replace (arr , pat , repl , n = - 1 , case = True , flags = 0 ):
303
303
"""
304
304
Replace
305
305
@@ -309,7 +309,7 @@ def str_replace(arr, pat, repl, n=0, case=True, flags=0):
309
309
Character sequence or regular expression
310
310
repl : string
311
311
Replacement sequence
312
- n : int, default 0 (all)
312
+ n : int, default -1 (all)
313
313
Number of replacements to make from start
314
314
case : boolean, default True
315
315
If True, case sensitive
@@ -320,13 +320,17 @@ def str_replace(arr, pat, repl, n=0, case=True, flags=0):
320
320
-------
321
321
replaced : array
322
322
"""
323
- if not case :
324
- flags |= re .IGNORECASE
325
-
326
- regex = re .compile (pat , flags = flags )
323
+ use_re = not case or len (pat ) > 1 or flags
327
324
328
- def f (x ):
329
- return regex .sub (repl , x , count = n )
325
+ if use_re :
326
+ if not case :
327
+ flags |= re .IGNORECASE
328
+ regex = re .compile (pat , flags = flags )
329
+ n = n if n >= 0 else 0
330
+ def f (x ):
331
+ return regex .sub (repl , x , count = n )
332
+ else :
333
+ f = lambda x : x .replace (pat , repl , n )
330
334
331
335
return _na_map (f , arr )
332
336
@@ -480,7 +484,7 @@ def str_center(arr, width):
480
484
return str_pad (arr , width , side = 'both' )
481
485
482
486
483
- def str_split (arr , pat = None , n = 0 ):
487
+ def str_split (arr , pat = None , n = - 1 ):
484
488
"""
485
489
Split each string (a la re.split) in array by given pattern, propagating NA
486
490
values
@@ -489,7 +493,7 @@ def str_split(arr, pat=None, n=0):
489
493
----------
490
494
pat : string, default None
491
495
String or regular expression to split on. If None, splits on whitespace
492
- n : int, default 0 (all)
496
+ n : int, default -1 (all)
493
497
494
498
Returns
495
499
-------
@@ -498,8 +502,11 @@ def str_split(arr, pat=None, n=0):
498
502
if pat is None :
499
503
f = lambda x : x .split ()
500
504
else :
501
- regex = re .compile (pat )
502
- f = lambda x : regex .split (x , maxsplit = n )
505
+ if len (pat ) == 1 :
506
+ f = lambda x : x .split (pat , n )
507
+ else :
508
+ regex = re .compile (pat )
509
+ f = lambda x : regex .split (x , maxsplit = n )
503
510
504
511
return _na_map (f , arr )
505
512
@@ -709,7 +716,7 @@ def cat(self, others=None, sep=None, na_rep=None):
709
716
return self ._wrap_result (result )
710
717
711
718
@copy (str_split )
712
- def split (self , pat = None , n = 0 ):
719
+ def split (self , pat = None , n = - 1 ):
713
720
result = str_split (self .series , pat , n = n )
714
721
return self ._wrap_result (result )
715
722
@@ -730,7 +737,7 @@ def contains(self, pat, case=True, flags=0, na=np.nan):
730
737
return self ._wrap_result (result )
731
738
732
739
@copy (str_replace )
733
- def replace (self , pat , repl , n = 0 , case = True ):
740
+ def replace (self , pat , repl , n = - 1 , case = True ):
734
741
result = str_replace (self .series , pat , repl , n = n , case = case )
735
742
return self ._wrap_result (result )
736
743
0 commit comments