diff --git a/pandas/core/arrays/string_arrow.py b/pandas/core/arrays/string_arrow.py index a6838fbc73be9..b643ce3eff6e7 100644 --- a/pandas/core/arrays/string_arrow.py +++ b/pandas/core/arrays/string_arrow.py @@ -50,8 +50,6 @@ if TYPE_CHECKING: - from collections.abc import Sequence - from pandas._typing import ( Dtype, Scalar, @@ -339,13 +337,19 @@ def _str_startswith(self, pat: str, na=None): result = pc.starts_with(self._pa_array, pattern=pat) if not isna(na): result = result.fill_null(na) - return self._result_converter(result) + result = self._result_converter(result) + if not isna(na): + result[isna(result)] = bool(na) + return result def _str_endswith(self, pat: str, na=None): result = pc.ends_with(self._pa_array, pattern=pat) if not isna(na): result = result.fill_null(na) - return self._result_converter(result) + result = self._result_converter(result) + if not isna(na): + result[isna(result)] = bool(na) + return result def _str_replace( self, @@ -364,12 +368,6 @@ def _str_replace( result = func(self._pa_array, pattern=pat, replacement=repl, max_replacements=n) return type(self)(result) - def _str_repeat(self, repeats: int | Sequence[int]): - if not isinstance(repeats, int): - return super()._str_repeat(repeats) - else: - return type(self)(pc.binary_repeat(self._pa_array, repeats)) - def _str_match( self, pat: str, case: bool = True, flags: int = 0, na: Scalar | None = None ): @@ -384,19 +382,6 @@ def _str_fullmatch( pat = f"{pat}$" return self._str_match(pat, case, flags, na) - def _str_slice( - self, start: int | None = None, stop: int | None = None, step: int | None = None - ): - if stop is None: - return super()._str_slice(start, stop, step) - if start is None: - start = 0 - if step is None: - step = 1 - return type(self)( - pc.utf8_slice_codeunits(self._pa_array, start=start, stop=stop, step=step) - ) - def _str_isalnum(self): result = pc.utf8_is_alnum(self._pa_array) return self._result_converter(result) @@ -609,4 +594,4 @@ def _reduce( name, skipna=skipna, keepdims=keepdims, **kwargs ) else: - return super()._reduce(name, skipna=skipna, keepdims=keepdims, **kwargs) + return super()._reduce(name, skipna=skipna, keepdims=keepdims, **kwargs) \ No newline at end of file