@@ -90,8 +90,11 @@ class StringDtype(StorageExtensionDtype):
90
90
91
91
name = "string"
92
92
93
- #: StringDtype.na_value uses pandas.NA
94
- na_value = libmissing .NA
93
+ #: StringDtype().na_value uses pandas.NA
94
+ @property
95
+ def na_value (self ) -> libmissing .NAType :
96
+ return libmissing .NA
97
+
95
98
_metadata = ("storage" ,)
96
99
97
100
def __init__ (self , storage = None ) -> None :
@@ -335,13 +338,11 @@ def _from_sequence(cls, scalars, *, dtype: Dtype | None = None, copy=False):
335
338
na_values = scalars ._mask
336
339
result = scalars ._data
337
340
result = lib .ensure_string_array (result , copy = copy , convert_na_value = False )
338
- result [na_values ] = StringDtype . na_value
341
+ result [na_values ] = libmissing . NA
339
342
340
343
else :
341
- # convert non-na-likes to str, and nan-likes to StringDtype.na_value
342
- result = lib .ensure_string_array (
343
- scalars , na_value = StringDtype .na_value , copy = copy
344
- )
344
+ # convert non-na-likes to str, and nan-likes to StringDtype().na_value
345
+ result = lib .ensure_string_array (scalars , na_value = libmissing .NA , copy = copy )
345
346
346
347
# Manually creating new array avoids the validation step in the __init__, so is
347
348
# faster. Refactor need for validation?
@@ -396,7 +397,7 @@ def __setitem__(self, key, value):
396
397
# validate new items
397
398
if scalar_value :
398
399
if isna (value ):
399
- value = StringDtype . na_value
400
+ value = libmissing . NA
400
401
elif not isinstance (value , str ):
401
402
raise ValueError (
402
403
f"Cannot set non-string value '{ value } ' into a StringArray."
@@ -497,7 +498,7 @@ def _cmp_method(self, other, op):
497
498
498
499
if op .__name__ in ops .ARITHMETIC_BINOPS :
499
500
result = np .empty_like (self ._ndarray , dtype = "object" )
500
- result [mask ] = StringDtype . na_value
501
+ result [mask ] = libmissing . NA
501
502
result [valid ] = op (self ._ndarray [valid ], other )
502
503
return StringArray (result )
503
504
else :
@@ -512,7 +513,7 @@ def _cmp_method(self, other, op):
512
513
# String methods interface
513
514
# error: Incompatible types in assignment (expression has type "NAType",
514
515
# base class "PandasArray" defined the type as "float")
515
- _str_na_value = StringDtype . na_value # type: ignore[assignment]
516
+ _str_na_value = libmissing . NA # type: ignore[assignment]
516
517
517
518
def _str_map (
518
519
self , f , na_value = None , dtype : Dtype | None = None , convert : bool = True
0 commit comments