Skip to content

Commit 7a5d7a8

Browse files
authored
Review inplace parameter (#58)
* series * frame * fix * assert_types * Add references to issue
1 parent 1118b79 commit 7a5d7a8

File tree

5 files changed

+94
-68
lines changed

5 files changed

+94
-68
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ venv.bak/
117117
# Rope project settings
118118
.ropeproject
119119

120+
# PyCharm project settings
121+
.idea/
122+
120123
# mkdocs documentation
121124
/site
122125

pandas-stubs/core/frame.pyi

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -544,18 +544,7 @@ class DataFrame(NDFrame, OpsMixin):
544544
self,
545545
to_replace=...,
546546
value: Optional[Union[Scalar, Sequence, Mapping, Pattern]] = ...,
547-
limit: Optional[int] = ...,
548-
regex=...,
549-
method: Optional[_str] = ...,
550-
*,
551-
inplace: Literal[False],
552-
) -> DataFrame: ...
553-
@overload
554-
def replace(
555-
self,
556-
to_replace=...,
557-
value: Optional[Union[Scalar, Sequence, Mapping, Pattern]] = ...,
558-
*,
547+
inplace: Literal[False] = ...,
559548
limit: Optional[int] = ...,
560549
regex=...,
561550
method: Optional[_str] = ...,
@@ -1238,7 +1227,7 @@ class DataFrame(NDFrame, OpsMixin):
12381227
self,
12391228
axis: Optional[AxisType] = ...,
12401229
*,
1241-
inplace: Literal[False],
1230+
inplace: Literal[False] = ...,
12421231
limit: Optional[int] = ...,
12431232
downcast: Optional[Dict] = ...,
12441233
) -> DataFrame: ...
@@ -1327,7 +1316,7 @@ class DataFrame(NDFrame, OpsMixin):
13271316
self,
13281317
axis: Optional[AxisType] = ...,
13291318
*,
1330-
inplace: Literal[False],
1319+
inplace: Literal[False] = ...,
13311320
limit: Optional[int] = ...,
13321321
downcast: Optional[Dict] = ...,
13331322
) -> DataFrame: ...

pandas-stubs/core/series.pyi

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -467,18 +467,7 @@ class Series(IndexOpsMixin, NDFrame, Generic[S1]):
467467
na_position: Union[_str, Literal["first", "last"]] = ...,
468468
ignore_index: _bool = ...,
469469
*,
470-
inplace: Literal[False],
471-
key: Optional[Callable] = ...,
472-
) -> Series[S1]: ...
473-
@overload
474-
def sort_values(
475-
self,
476-
axis: AxisType = ...,
477-
ascending: Union[_bool, Sequence[_bool]] = ...,
478-
*,
479-
kind: Union[_str, Literal["quicksort", "mergesort", "heapsort"]] = ...,
480-
na_position: Union[_str, Literal["first", "last"]] = ...,
481-
ignore_index: _bool = ...,
470+
inplace: Literal[False] = ...,
482471
key: Optional[Callable] = ...,
483472
) -> Series[S1]: ...
484473
@overload
@@ -517,20 +506,7 @@ class Series(IndexOpsMixin, NDFrame, Generic[S1]):
517506
sort_remaining: _bool = ...,
518507
ignore_index: _bool = ...,
519508
*,
520-
inplace: Literal[False],
521-
key: Optional[Callable] = ...,
522-
) -> Series: ...
523-
@overload
524-
def sort_index(
525-
self,
526-
axis: AxisType = ...,
527-
level: Optional[Union[Level, List[int], List[_str]]] = ...,
528-
ascending: Union[_bool, Sequence[_bool]] = ...,
529-
*,
530-
kind: Union[_str, Literal["quicksort", "mergesort", "heapsort"]] = ...,
531-
na_position: Union[_str, Literal["first", "last"]] = ...,
532-
sort_remaining: _bool = ...,
533-
ignore_index: _bool = ...,
509+
inplace: Literal[False] = ...,
534510
key: Optional[Callable] = ...,
535511
) -> Series: ...
536512
@overload
@@ -747,15 +723,37 @@ class Series(IndexOpsMixin, NDFrame, Generic[S1]):
747723
limit: Optional[int] = ...,
748724
downcast: Optional[Dict] = ...,
749725
) -> Union[Series[S1], None]: ...
726+
@overload
750727
def replace(
751728
self,
752729
to_replace: Optional[Union[_str, List, Dict, Series[S1], int, float]] = ...,
753730
value: Optional[Union[Scalar, Dict, List, _str]] = ...,
754-
inplace: _bool = ...,
731+
inplace: Literal[False] = ...,
755732
limit: Optional[int] = ...,
756733
regex=...,
757734
method: Optional[Union[_str, Literal["pad", "ffill", "bfill"]]] = ...,
758735
) -> Series[S1]: ...
736+
@overload
737+
def replace(
738+
self,
739+
to_replace: Optional[Union[_str, List, Dict, Series[S1], int, float]] = ...,
740+
value: Optional[Union[Scalar, Dict, List, _str]] = ...,
741+
limit: Optional[int] = ...,
742+
regex=...,
743+
method: Optional[Union[_str, Literal["pad", "ffill", "bfill"]]] = ...,
744+
*,
745+
inplace: Literal[True],
746+
) -> None: ...
747+
@overload
748+
def replace(
749+
self,
750+
to_replace: Optional[Union[_str, List, Dict, Series[S1], int, float]] = ...,
751+
value: Optional[Union[Scalar, Dict, List, _str]] = ...,
752+
inplace: _bool = ...,
753+
limit: Optional[int] = ...,
754+
regex=...,
755+
method: Optional[Union[_str, Literal["pad", "ffill", "bfill"]]] = ...,
756+
) -> Union[Series[S1], None]: ...
759757
def shift(
760758
self,
761759
periods: int = ...,
@@ -878,7 +876,7 @@ class Series(IndexOpsMixin, NDFrame, Generic[S1]):
878876
self,
879877
axis: Optional[SeriesAxisType] = ...,
880878
*,
881-
inplace: Literal[False],
879+
inplace: Literal[False] = ...,
882880
limit: Optional[int] = ...,
883881
downcast: Optional[Dict] = ...,
884882
) -> Series[S1]: ...
@@ -896,7 +894,7 @@ class Series(IndexOpsMixin, NDFrame, Generic[S1]):
896894
self,
897895
axis: Optional[SeriesAxisType] = ...,
898896
*,
899-
inplace: Literal[False],
897+
inplace: Literal[False] = ...,
900898
limit: Optional[int] = ...,
901899
downcast: Optional[Dict] = ...,
902900
) -> Series[S1]: ...

tests/test_frame.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,3 +1020,27 @@ def test_join() -> None:
10201020
frameCD = float_frame[["C", "D"]]
10211021
right: List[Union[pd.Series, pd.DataFrame]] = [seriesB, frameCD]
10221022
result = left.join(right)
1023+
1024+
1025+
def test_types_ffill() -> None:
1026+
# GH 44
1027+
df = pd.DataFrame([[1, 2, 3]])
1028+
assert_type(df.ffill(), pd.DataFrame)
1029+
assert_type(df.ffill(inplace=False), pd.DataFrame)
1030+
assert_type(df.ffill(inplace=True), None)
1031+
1032+
1033+
def test_types_bfill() -> None:
1034+
# GH 44
1035+
df = pd.DataFrame([[1, 2, 3]])
1036+
assert_type(df.bfill(), pd.DataFrame)
1037+
assert_type(df.bfill(inplace=False), pd.DataFrame)
1038+
assert_type(df.bfill(inplace=True), None)
1039+
1040+
1041+
def test_types_replace() -> None:
1042+
# GH 44
1043+
df = pd.DataFrame([[1, 2, 3]])
1044+
assert_type(df.replace(1, 2), pd.DataFrame)
1045+
assert_type(df.replace(1, 2, inplace=False), pd.DataFrame)
1046+
assert_type(df.replace(1, 2, inplace=True), None)

tests/test_series.py

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -146,11 +146,11 @@ def test_types_setting() -> None:
146146

147147
def test_types_drop() -> None:
148148
s = pd.Series([0, 1, 2])
149-
res: pd.Series = s.drop(0)
150-
res2: pd.Series = s.drop([0, 1])
151-
res3: pd.Series = s.drop(0, axis=0)
152-
res4: None = s.drop([0, 1], inplace=True, errors="raise")
153-
res5: None = s.drop([0, 1], inplace=True, errors="ignore")
149+
assert_type(s.drop(0), pd.Series)
150+
assert_type(s.drop([0, 1]), pd.Series)
151+
assert_type(s.drop(0, axis=0), pd.Series)
152+
assert_type(s.drop([0, 1], inplace=True, errors="raise"), None)
153+
assert_type(s.drop([0, 1], inplace=True, errors="ignore"), None)
154154

155155

156156
def test_types_drop_multilevel() -> None:
@@ -164,25 +164,26 @@ def test_types_drop_multilevel() -> None:
164164

165165
def test_types_dropna() -> None:
166166
s = pd.Series([1, np.nan, np.nan])
167-
res: pd.Series = s.dropna()
168-
res2: None = s.dropna(axis=0, inplace=True)
167+
assert_type(s.dropna(), pd.Series)
168+
assert_type(s.dropna(axis=0, inplace=True), None)
169169

170170

171171
def test_types_fillna() -> None:
172172
s = pd.Series([1, np.nan, np.nan, 3])
173-
res: pd.Series = s.fillna(0)
174-
res2: pd.Series = s.fillna(0, axis="index")
175-
res3: pd.Series = s.fillna(method="backfill", axis=0)
176-
res4: None = s.fillna(method="bfill", inplace=True)
177-
res5: pd.Series = s.fillna(method="pad")
178-
res6: pd.Series = s.fillna(method="ffill", limit=1)
173+
assert_type(s.fillna(0), pd.Series)
174+
assert_type(s.fillna(0, axis="index"), pd.Series)
175+
assert_type(s.fillna(method="backfill", axis=0), pd.Series)
176+
assert_type(s.fillna(method="bfill", inplace=True), None)
177+
assert_type(s.fillna(method="pad"), pd.Series)
178+
assert_type(s.fillna(method="ffill", limit=1), pd.Series)
179179

180180

181181
def test_types_sort_index() -> None:
182182
s = pd.Series([1, 2, 3], index=[2, 3, 1])
183-
res: pd.Series = s.sort_index()
184-
res2: None = s.sort_index(ascending=False, inplace=True)
185-
res3: pd.Series = s.sort_index(kind="mergesort")
183+
assert_type(s.sort_index(), pd.Series)
184+
assert_type(s.sort_index(ascending=False), pd.Series)
185+
assert_type(s.sort_index(ascending=False, inplace=True), None)
186+
assert_type(s.sort_index(kind="mergesort"), pd.Series)
186187

187188

188189
# This was added in 1.1.0 https://pandas.pydata.org/docs/whatsnew/v1.1.0.html
@@ -193,11 +194,12 @@ def test_types_sort_index_with_key() -> None:
193194

194195
def test_types_sort_values() -> None:
195196
s = pd.Series([4, 2, 1, 3])
196-
res: pd.Series = s.sort_values(0)
197-
res2: pd.Series = s.sort_values(ascending=False)
198-
res3: None = s.sort_values(inplace=True, kind="quicksort")
199-
res4: pd.Series = s.sort_values(na_position="last")
200-
res5: pd.Series = s.sort_values(ignore_index=True)
197+
assert_type(s.sort_values(), pd.Series)
198+
assert_type(s.sort_values(0), pd.Series)
199+
assert_type(s.sort_values(ascending=False), pd.Series)
200+
assert_type(s.sort_values(inplace=True, kind="quicksort"), None)
201+
assert_type(s.sort_values(na_position="last"), pd.Series)
202+
assert_type(s.sort_values(ignore_index=True), pd.Series)
201203

202204

203205
# This was added in 1.1.0 https://pandas.pydata.org/docs/whatsnew/v1.1.0.html
@@ -547,8 +549,9 @@ def test_types_ne() -> None:
547549

548550
def test_types_bfill() -> None:
549551
s1 = pd.Series([1, 2, 3])
550-
s2: pd.Series = s1.bfill(inplace=False)
551-
s3: None = s1.bfill(inplace=True)
552+
assert_type(s1.bfill(), pd.Series)
553+
assert_type(s1.bfill(inplace=False), pd.Series)
554+
assert_type(s1.bfill(inplace=True), None)
552555

553556

554557
def test_types_ewm() -> None:
@@ -563,8 +566,9 @@ def test_types_ewm() -> None:
563566

564567
def test_types_ffill() -> None:
565568
s1 = pd.Series([1, 2, 3])
566-
s2: pd.Series = s1.ffill(inplace=False)
567-
s3: None = s1.ffill(inplace=True)
569+
assert_type(s1.ffill(), pd.Series)
570+
assert_type(s1.ffill(inplace=False), pd.Series)
571+
assert_type(s1.ffill(inplace=True), None)
568572

569573

570574
def test_types_as_type() -> None:
@@ -671,3 +675,11 @@ def test_series_add_str() -> None:
671675
def test_series_dtype() -> None:
672676
s = pd.Series(["abc", "def"], dtype=str)
673677
assert_type(s, "pd.Series[str]")
678+
679+
680+
def test_types_replace() -> None:
681+
# GH 44
682+
s = pd.Series([1, 2, 3])
683+
assert_type(s.replace(1, 2), pd.Series)
684+
assert_type(s.replace(1, 2, inplace=False), pd.Series)
685+
assert_type(s.replace(1, 2, inplace=True), None)

0 commit comments

Comments
 (0)