Skip to content

Commit 5bac3d0

Browse files
committed
Make series.array read-only
1 parent e9381ae commit 5bac3d0

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

pandas/core/internals/blocks.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2112,7 +2112,9 @@ def is_view(self) -> bool:
21122112

21132113
@property
21142114
def array_values(self) -> ExtensionArray:
2115-
return NumpyExtensionArray(self.values)
2115+
values = self.values.view()
2116+
values.flags.writeable = False
2117+
return NumpyExtensionArray(values)
21162118

21172119
def get_values(self, dtype: DtypeObj | None = None) -> np.ndarray:
21182120
if dtype == _dtype_obj:
@@ -2364,6 +2366,4 @@ def external_values(values: ArrayLike) -> ArrayLike:
23642366
values = values.view()
23652367
values.flags.writeable = False
23662368

2367-
# TODO(CoW) we should also mark our ExtensionArrays as read-only
2368-
23692369
return values

pandas/tests/copy_view/test_array.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,10 @@ def test_empty_dataframe():
141141
df = DataFrame()
142142
arr = np.asarray(df)
143143
assert arr.flags.writeable is True
144+
145+
146+
def test_series_array_not_writable():
147+
# GH 58007
148+
ser = Series([1, 2])
149+
with pytest.raises(ValueError, match="assignment destination is read-only"):
150+
ser.array[0] = 2

0 commit comments

Comments
 (0)