diff --git a/pandas/core/arrays/string_.py b/pandas/core/arrays/string_.py index 3b297e7c2b13b..e75305e55348c 100644 --- a/pandas/core/arrays/string_.py +++ b/pandas/core/arrays/string_.py @@ -282,10 +282,6 @@ def __setitem__(self, key, value): super().__setitem__(key, value) - def fillna(self, value=None, method=None, limit=None): - # TODO: validate dtype - return super().fillna(value, method, limit) - def astype(self, dtype, copy=True): dtype = pandas_dtype(dtype) if isinstance(dtype, StringDtype): diff --git a/pandas/tests/arrays/string_/test_string.py b/pandas/tests/arrays/string_/test_string.py index 07e9484994c26..9a1634380aaba 100644 --- a/pandas/tests/arrays/string_/test_string.py +++ b/pandas/tests/arrays/string_/test_string.py @@ -422,6 +422,24 @@ def test_reduce_missing(skipna, dtype): assert pd.isna(result) +def test_fillna_args(): + # GH 37987 + + arr = pd.array(["a", pd.NA], dtype="string") + + res = arr.fillna(value="b") + expected = pd.array(["a", "b"], dtype="string") + tm.assert_extension_array_equal(res, expected) + + res = arr.fillna(value=np.str_("b")) + expected = pd.array(["a", "b"], dtype="string") + tm.assert_extension_array_equal(res, expected) + + msg = "Cannot set non-string value '1' into a StringArray." + with pytest.raises(ValueError, match=msg): + arr.fillna(value=1) + + @td.skip_if_no("pyarrow", min_version="0.15.0") def test_arrow_array(dtype): # protocol added in 0.15.0