Skip to content

Commit 8902752

Browse files
authored
Allow None in .loc.__setitem__ and .iloc.__setitem__ (#446)
1 parent de675b7 commit 8902752

File tree

3 files changed

+19
-8
lines changed

3 files changed

+19
-8
lines changed

pandas-stubs/core/frame.pyi

+3-3
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ class _iLocIndexerFrame(_iLocIndexer):
141141
| tuple[IndexType, int]
142142
| tuple[IndexType, IndexType]
143143
| tuple[int, IndexType],
144-
value: float | Series | DataFrame | np.ndarray,
144+
value: S1 | Series | DataFrame | np.ndarray | None,
145145
) -> None: ...
146146

147147
class _LocIndexerFrame(_LocIndexer):
@@ -172,13 +172,13 @@ class _LocIndexerFrame(_LocIndexer):
172172
def __setitem__(
173173
self,
174174
idx: MaskType | StrLike | _IndexSliceTuple | list[ScalarT],
175-
value: S1 | ArrayLike | Series | DataFrame,
175+
value: S1 | ArrayLike | Series | DataFrame | None,
176176
) -> None: ...
177177
@overload
178178
def __setitem__(
179179
self,
180180
idx: tuple[_IndexSliceTuple, HashableT],
181-
value: S1 | ArrayLike | Series[S1] | list,
181+
value: S1 | ArrayLike | Series[S1] | list | None,
182182
) -> None: ...
183183

184184
class DataFrame(NDFrame, OpsMixin):

pandas-stubs/core/series.pyi

+5-5
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,10 @@ class _iLocIndexerSeries(_iLocIndexer, Generic[S1]):
135135
def __getitem__(self, idx: Index | slice | np_ndarray_anyint) -> Series[S1]: ...
136136
# set item
137137
@overload
138-
def __setitem__(self, idx: int, value: S1) -> None: ...
138+
def __setitem__(self, idx: int, value: S1 | None) -> None: ...
139139
@overload
140140
def __setitem__(
141-
self, idx: Index | slice | np_ndarray_anyint, value: S1 | Series[S1]
141+
self, idx: Index | slice | np_ndarray_anyint, value: S1 | Series[S1] | None
142142
) -> None: ...
143143

144144
class _LocIndexerSeries(_LocIndexer, Generic[S1]):
@@ -161,19 +161,19 @@ class _LocIndexerSeries(_LocIndexer, Generic[S1]):
161161
def __setitem__(
162162
self,
163163
idx: Index | MaskType,
164-
value: S1 | ArrayLike | Series[S1],
164+
value: S1 | ArrayLike | Series[S1] | None,
165165
) -> None: ...
166166
@overload
167167
def __setitem__(
168168
self,
169169
idx: str,
170-
value: S1,
170+
value: S1 | None,
171171
) -> None: ...
172172
@overload
173173
def __setitem__(
174174
self,
175175
idx: list[int] | list[str] | list[str | int],
176-
value: S1 | ArrayLike | Series[S1],
176+
value: S1 | ArrayLike | Series[S1] | None,
177177
) -> None: ...
178178

179179
class Series(IndexOpsMixin, NDFrame, Generic[S1]):

tests/test_frame.py

+11
Original file line numberDiff line numberDiff line change
@@ -1953,3 +1953,14 @@ def test_series_groupby_and_value_counts() -> None:
19531953
)
19541954
c: pd.Series = df.groupby("Animal")["Max Speed"].value_counts()
19551955
check(assert_type(c, pd.Series), pd.Series)
1956+
1957+
1958+
def test_setitem_none() -> None:
1959+
df = pd.DataFrame(
1960+
{"A": [1, 2, 3], "B": ["abc", "def", "ghi"]}, index=["x", "y", "z"]
1961+
)
1962+
df.loc["x", "B"] = None
1963+
df.iloc[2, 0] = None
1964+
sb = pd.Series([1, 2, 3], dtype=int)
1965+
sb.loc["y"] = None
1966+
sb.iloc[0] = None

0 commit comments

Comments
 (0)