Skip to content

Commit e3d0a16

Browse files
committed
allow loc setitem to accept a slice
1 parent a2ed7b5 commit e3d0a16

File tree

4 files changed

+40
-22
lines changed

4 files changed

+40
-22
lines changed

pandas-stubs/core/frame.pyi

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,9 @@ class _LocIndexerFrame(_LocIndexer):
220220
@overload
221221
def __setitem__(
222222
self,
223-
idx: MaskType | StrLike | _IndexSliceTuple | list[ScalarT] | IndexingInt,
223+
idx: (
224+
MaskType | StrLike | _IndexSliceTuple | list[ScalarT] | IndexingInt | slice
225+
),
224226
value: Scalar | NAType | NaTType | ArrayLike | Series | DataFrame | list | None,
225227
) -> None: ...
226228
@overload

pandas-stubs/core/series.pyi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ class _LocIndexerSeries(_LocIndexer, Generic[S1]):
208208
@overload
209209
def __setitem__(
210210
self,
211-
idx: Index | MaskType,
211+
idx: Index | MaskType | slice,
212212
value: S1 | ArrayLike | Series[S1] | None,
213213
) -> None: ...
214214
@overload

tests/test_frame.py

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
Iterator,
88
Mapping,
99
MutableMapping,
10-
Sequence,
1110
)
1211
import csv
1312
import datetime
@@ -39,7 +38,6 @@
3938
from pandas.core.series import Series
4039
import pytest
4140
from typing_extensions import (
42-
Never,
4341
TypeAlias,
4442
assert_never,
4543
assert_type,
@@ -3763,22 +3761,9 @@ def test_info() -> None:
37633761
check(assert_type(df.info(show_counts=None), None), type(None))
37643762

37653763

3766-
def test_series_typed_dict() -> None:
3767-
"""Test that no error is raised when constructing a series from a typed dict."""
3764+
def test_frame_single_slice() -> None:
3765+
# GH 572
3766+
df = pd.DataFrame([1, 2, 3])
3767+
check(assert_type(df.loc[:], pd.DataFrame), pd.DataFrame)
37683768

3769-
class MyDict(TypedDict):
3770-
a: str
3771-
b: str
3772-
3773-
my_dict = MyDict(a="", b="")
3774-
sr = pd.Series(my_dict)
3775-
check(assert_type(sr, pd.Series), pd.Series)
3776-
3777-
3778-
def test_series_empty_dtype() -> None:
3779-
"""Test for the creation of a Series from an empty list GH571 to map to a Series[Any]."""
3780-
new_tab: Sequence[Never] = [] # need to be typehinted to please mypy
3781-
check(assert_type(pd.Series(new_tab), "pd.Series[Any]"), pd.Series)
3782-
check(assert_type(pd.Series([]), "pd.Series[Any]"), pd.Series)
3783-
# ensure that an empty string does not get matched to Sequence[Never]
3784-
check(assert_type(pd.Series(""), "pd.Series[str]"), pd.Series)
3769+
df.loc[:] = 1 + df

tests/test_series.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
Any,
1717
Generic,
1818
Literal,
19+
TypedDict,
1920
TypeVar,
2021
Union,
2122
cast,
@@ -33,6 +34,7 @@
3334
from pandas.core.window import ExponentialMovingWindow
3435
import pytest
3536
from typing_extensions import (
37+
Never,
3638
Self,
3739
TypeAlias,
3840
assert_never,
@@ -3465,3 +3467,32 @@ def test_apply_dateoffset() -> None:
34653467
pd.Series,
34663468
pd.DateOffset,
34673469
)
3470+
3471+
3472+
def test_series_single_slice() -> None:
3473+
# GH 572
3474+
s = pd.Series([1, 2, 3])
3475+
check(assert_type(s.loc[:], "pd.Series[int]"), pd.Series, np.integer)
3476+
3477+
s.loc[:] = 1 + s
3478+
3479+
3480+
def test_series_typed_dict() -> None:
3481+
"""Test that no error is raised when constructing a series from a typed dict."""
3482+
3483+
class MyDict(TypedDict):
3484+
a: str
3485+
b: str
3486+
3487+
my_dict = MyDict(a="", b="")
3488+
sr = pd.Series(my_dict)
3489+
check(assert_type(sr, pd.Series), pd.Series)
3490+
3491+
3492+
def test_series_empty_dtype() -> None:
3493+
"""Test for the creation of a Series from an empty list GH571 to map to a Series[Any]."""
3494+
new_tab: Sequence[Never] = [] # need to be typehinted to please mypy
3495+
check(assert_type(pd.Series(new_tab), "pd.Series[Any]"), pd.Series)
3496+
check(assert_type(pd.Series([]), "pd.Series[Any]"), pd.Series)
3497+
# ensure that an empty string does not get matched to Sequence[Never]
3498+
check(assert_type(pd.Series(""), "pd.Series[str]"), pd.Series)

0 commit comments

Comments
 (0)