Skip to content

Commit 148afe8

Browse files
committed
use typealias
1 parent 5706029 commit 148afe8

File tree

4 files changed

+33
-125
lines changed

4 files changed

+33
-125
lines changed

pandas-stubs/_typing.pyi

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ from collections.abc import (
1010
import datetime
1111
from datetime import tzinfo
1212
from os import PathLike
13+
from re import Pattern
1314
import sys
1415
from typing import (
1516
Any,
@@ -36,6 +37,7 @@ from typing_extensions import (
3637
)
3738

3839
from pandas._libs.interval import Interval
40+
from pandas._libs.missing import NAType
3941
from pandas._libs.tslibs import (
4042
BaseOffset,
4143
Period,
@@ -731,6 +733,15 @@ InterpolateOptions: TypeAlias = Literal[
731733
"cubicspline",
732734
"from_derivatives",
733735
]
736+
ReplaceValue: TypeAlias = (
737+
Scalar
738+
| Pattern
739+
| NAType
740+
| Sequence[Scalar | Pattern]
741+
| Mapping[Scalar | Pattern, Scalar]
742+
| Series[Any]
743+
| None
744+
)
734745
SortKind: TypeAlias = Literal["quicksort", "mergesort", "heapsort", "stable"]
735746
NaPosition: TypeAlias = Literal["first", "last"]
736747
JoinHow: TypeAlias = Literal["left", "right", "outer", "inner"]

pandas-stubs/core/frame.pyi

Lines changed: 7 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ from collections.abc import (
88
Sequence,
99
)
1010
import datetime as dt
11-
from re import Pattern
1211
import sys
1312
from typing import (
1413
Any,
@@ -113,6 +112,7 @@ from pandas._typing import (
113112
RandomState,
114113
ReadBuffer,
115114
Renamer,
115+
ReplaceValue,
116116
Scalar,
117117
ScalarT,
118118
SequenceNotStr,
@@ -798,90 +798,20 @@ class DataFrame(NDFrame, OpsMixin, _GetItemHack):
798798
@overload
799799
def replace(
800800
self,
801-
to_replace: (
802-
Scalar
803-
| NAType
804-
| Sequence[Scalar | Pattern]
805-
| Mapping[Scalar | Pattern, Scalar]
806-
| Mapping[Hashable, Scalar | Pattern]
807-
| Mapping[Hashable, Sequence[Scalar | Pattern]]
808-
| Mapping[Hashable, Mapping[Scalar | Pattern, Scalar]]
809-
| Mapping[Hashable, Series[Any]]
810-
| Series[Any]
811-
| Pattern
812-
| None
813-
) = ...,
814-
value: (
815-
Scalar
816-
| NAType
817-
| Sequence[Scalar]
818-
| Mapping[Scalar, Scalar]
819-
| Mapping[Hashable, Scalar]
820-
| Mapping[Hashable, Sequence[Scalar]]
821-
| Mapping[Hashable, Mapping[Scalar, Scalar]]
822-
| Mapping[Hashable, Series[Any]]
823-
| Series[Any]
824-
| None
825-
) = ...,
801+
to_replace: ReplaceValue | Mapping[Hashable, ReplaceValue] = ...,
802+
value: ReplaceValue | Mapping[Hashable, ReplaceValue] = ...,
826803
*,
827804
inplace: Literal[True],
828-
regex: (
829-
Scalar
830-
| NAType
831-
| Sequence[Scalar | Pattern]
832-
| Mapping[Scalar | Pattern, Scalar]
833-
| Mapping[Hashable, Scalar | Pattern]
834-
| Mapping[Hashable, Sequence[Scalar | Pattern]]
835-
| Mapping[Hashable, Mapping[Scalar | Pattern, Scalar]]
836-
| Mapping[Hashable, Series[Any]]
837-
| Series[Any]
838-
| Pattern
839-
| None
840-
) = ...,
805+
regex: ReplaceValue | Mapping[Hashable, ReplaceValue] = ...,
841806
) -> None: ...
842807
@overload
843808
def replace(
844809
self,
845-
to_replace: (
846-
Scalar
847-
| NAType
848-
| Sequence[Scalar | Pattern]
849-
| Mapping[Scalar | Pattern, Scalar]
850-
| Mapping[Hashable, Scalar | Pattern]
851-
| Mapping[Hashable, Sequence[Scalar | Pattern]]
852-
| Mapping[Hashable, Mapping[Scalar | Pattern, Scalar]]
853-
| Mapping[Hashable, Series[Any]]
854-
| Series[Any]
855-
| Pattern
856-
| None
857-
) = ...,
858-
value: (
859-
Scalar
860-
| NAType
861-
| Sequence[Scalar]
862-
| Mapping[Scalar, Scalar]
863-
| Mapping[Hashable, Scalar]
864-
| Mapping[Hashable, Sequence[Scalar]]
865-
| Mapping[Hashable, Mapping[Scalar, Scalar]]
866-
| Mapping[Hashable, Series[Any]]
867-
| Series[Any]
868-
| None
869-
) = ...,
810+
to_replace: ReplaceValue | Mapping[Hashable, ReplaceValue] = ...,
811+
value: ReplaceValue | Mapping[Hashable, ReplaceValue] = ...,
870812
*,
871813
inplace: Literal[False] = ...,
872-
regex: (
873-
Scalar
874-
| NAType
875-
| Sequence[Scalar | Pattern]
876-
| Mapping[Scalar | Pattern, Scalar]
877-
| Mapping[Hashable, Scalar | Pattern]
878-
| Mapping[Hashable, Sequence[Scalar | Pattern]]
879-
| Mapping[Hashable, Mapping[Scalar | Pattern, Scalar]]
880-
| Mapping[Hashable, Series[Any]]
881-
| Series[Any]
882-
| Pattern
883-
| None
884-
) = ...,
814+
regex: ReplaceValue | Mapping[Hashable, ReplaceValue] = ...,
885815
) -> Self: ...
886816
def shift(
887817
self,

pandas-stubs/core/series.pyi

Lines changed: 10 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ from datetime import (
1515
timedelta,
1616
)
1717
from pathlib import Path
18-
from re import Pattern
1918
from typing import (
2019
Any,
2120
ClassVar,
@@ -25,7 +24,10 @@ from typing import (
2524
overload,
2625
)
2726

28-
from _typing import TimeZones
27+
from _typing import (
28+
ReplaceValue,
29+
TimeZones,
30+
)
2931
from matplotlib.axes import (
3032
Axes as PlotAxes,
3133
SubplotBase,
@@ -1089,54 +1091,20 @@ class Series(IndexOpsMixin[S1], NDFrame):
10891091
@overload
10901092
def replace(
10911093
self,
1092-
to_replace: (
1093-
Scalar
1094-
| NAType
1095-
| Sequence[Scalar | Pattern]
1096-
| Mapping[Scalar | Pattern, Scalar]
1097-
| Series[Any]
1098-
| Pattern
1099-
| None
1100-
) = ...,
1101-
value: (
1102-
Scalar | NAType | Sequence[Scalar] | Mapping[Scalar, Scalar] | None
1103-
) = ...,
1094+
to_replace: ReplaceValue = ...,
1095+
value: ReplaceValue = ...,
11041096
*,
1105-
regex: (
1106-
bool
1107-
| str
1108-
| Pattern
1109-
| Sequence[str | Pattern]
1110-
| Mapping[Scalar | Pattern, Scalar]
1111-
| Series[Any]
1112-
) = ...,
1097+
regex: ReplaceValue = ...,
11131098
inplace: Literal[True],
11141099
) -> None: ...
11151100
@overload
11161101
def replace(
11171102
self,
1118-
to_replace: (
1119-
Scalar
1120-
| NAType
1121-
| Sequence[Scalar | Pattern]
1122-
| Mapping[Scalar | Pattern, Scalar]
1123-
| Series[Any]
1124-
| Pattern
1125-
| None
1126-
) = ...,
1127-
value: (
1128-
Scalar | NAType | Sequence[Scalar] | Mapping[Scalar, Scalar] | None
1129-
) = ...,
1103+
to_replace: ReplaceValue = ...,
1104+
value: ReplaceValue = ...,
11301105
*,
1106+
regex: ReplaceValue = ...,
11311107
inplace: Literal[False] = ...,
1132-
regex: (
1133-
bool
1134-
| str
1135-
| Pattern
1136-
| Sequence[str | Pattern]
1137-
| Mapping[Scalar | Pattern, Scalar]
1138-
| Series[Any]
1139-
) = ...,
11401108
) -> Series[S1]: ...
11411109
def shift(
11421110
self,

tests/test_frame.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2574,22 +2574,21 @@ def test_types_replace() -> None:
25742574
def test_dataframe_replace() -> None:
25752575
df = pd.DataFrame({"col1": ["a", "ab", "ba"]})
25762576
pattern = re.compile(r"^a.*")
2577-
# global scalar replacement
25782577
check(assert_type(df.replace("a", "x"), pd.DataFrame), pd.DataFrame)
25792578
check(assert_type(df.replace(pattern, "x"), pd.DataFrame), pd.DataFrame)
25802579
check(assert_type(df.replace("a", "x", regex=True), pd.DataFrame), pd.DataFrame)
25812580
check(assert_type(df.replace(pattern, "x"), pd.DataFrame), pd.DataFrame)
25822581
check(assert_type(df.replace(regex="a", value="x"), pd.DataFrame), pd.DataFrame)
25832582
check(assert_type(df.replace(regex=pattern, value="x"), pd.DataFrame), pd.DataFrame)
2584-
# global sequence replacement
2583+
25852584
check(assert_type(df.replace(["a"], ["x"]), pd.DataFrame), pd.DataFrame)
25862585
check(assert_type(df.replace([pattern], ["x"]), pd.DataFrame), pd.DataFrame)
25872586
check(assert_type(df.replace(regex=["a"], value=["x"]), pd.DataFrame), pd.DataFrame)
25882587
check(
25892588
assert_type(df.replace(regex=[pattern], value=["x"]), pd.DataFrame),
25902589
pd.DataFrame,
25912590
)
2592-
# global mapping
2591+
25932592
check(assert_type(df.replace({"a": "x"}), pd.DataFrame), pd.DataFrame)
25942593
check(assert_type(df.replace({pattern: "x"}), pd.DataFrame), pd.DataFrame)
25952594
check(assert_type(df.replace(pd.Series({"a": "x"})), pd.DataFrame), pd.DataFrame)
@@ -2598,7 +2597,7 @@ def test_dataframe_replace() -> None:
25982597
check(
25992598
assert_type(df.replace(regex=pd.Series({"a": "x"})), pd.DataFrame), pd.DataFrame
26002599
)
2601-
# per-column scalar-scalar replacement
2600+
26022601
check(
26032602
assert_type(df.replace({"col1": "a"}, {"col1": "x"}), pd.DataFrame),
26042603
pd.DataFrame,
@@ -2630,7 +2629,7 @@ def test_dataframe_replace() -> None:
26302629
),
26312630
pd.DataFrame,
26322631
)
2633-
# per-column sequence replacement
2632+
26342633
check(
26352634
assert_type(df.replace({"col1": ["a"]}, {"col1": ["x"]}), pd.DataFrame),
26362635
pd.DataFrame,
@@ -2667,7 +2666,7 @@ def test_dataframe_replace() -> None:
26672666
),
26682667
pd.DataFrame,
26692668
)
2670-
# per-column mapping
2669+
26712670
check(assert_type(df.replace({"col1": {"a": "x"}}), pd.DataFrame), pd.DataFrame)
26722671
check(assert_type(df.replace({"col1": {pattern: "x"}}), pd.DataFrame), pd.DataFrame)
26732672
check(

0 commit comments

Comments
 (0)