Skip to content

Commit 8455f57

Browse files
authored
TYP : DataFrame.(merge, join) core.reshape.merge.(merge, ...) (easy) (#38468)
1 parent 245cd11 commit 8455f57

File tree

3 files changed

+75
-60
lines changed

3 files changed

+75
-60
lines changed

pandas/_typing.py

+1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
IndexLabel = Union[Label, Sequence[Label]]
9696
Level = Union[Label, int]
9797
Shape = Tuple[int, ...]
98+
Suffixes = Tuple[str, str]
9899
Ordered = Optional[bool]
99100
JSONSerializable = Optional[Union[PythonScalar, List, Dict]]
100101
Axes = Collection

pandas/core/frame.py

+23-15
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,12 @@
5959
FormattersType,
6060
FrameOrSeriesUnion,
6161
IndexKeyFunc,
62+
IndexLabel,
6263
Label,
6364
Level,
6465
Renamer,
6566
StorageOptions,
67+
Suffixes,
6668
ValueKeyFunc,
6769
)
6870
from pandas.compat._optional import import_optional_dependency
@@ -8028,8 +8030,8 @@ def append(
80288030

80298031
def join(
80308032
self,
8031-
other,
8032-
on=None,
8033+
other: FrameOrSeriesUnion,
8034+
on: Optional[IndexLabel] = None,
80338035
how: str = "left",
80348036
lsuffix: str = "",
80358037
rsuffix: str = "",
@@ -8157,7 +8159,13 @@ def join(
81578159
)
81588160

81598161
def _join_compat(
8160-
self, other, on=None, how="left", lsuffix="", rsuffix="", sort=False
8162+
self,
8163+
other: FrameOrSeriesUnion,
8164+
on: Optional[IndexLabel] = None,
8165+
how: str = "left",
8166+
lsuffix: str = "",
8167+
rsuffix: str = "",
8168+
sort: bool = False,
81618169
):
81628170
from pandas.core.reshape.concat import concat
81638171
from pandas.core.reshape.merge import merge
@@ -8222,18 +8230,18 @@ def _join_compat(
82228230
@Appender(_merge_doc, indents=2)
82238231
def merge(
82248232
self,
8225-
right,
8226-
how="inner",
8227-
on=None,
8228-
left_on=None,
8229-
right_on=None,
8230-
left_index=False,
8231-
right_index=False,
8232-
sort=False,
8233-
suffixes=("_x", "_y"),
8234-
copy=True,
8235-
indicator=False,
8236-
validate=None,
8233+
right: FrameOrSeriesUnion,
8234+
how: str = "inner",
8235+
on: Optional[IndexLabel] = None,
8236+
left_on: Optional[IndexLabel] = None,
8237+
right_on: Optional[IndexLabel] = None,
8238+
left_index: bool = False,
8239+
right_index: bool = False,
8240+
sort: bool = False,
8241+
suffixes: Suffixes = ("_x", "_y"),
8242+
copy: bool = True,
8243+
indicator: bool = False,
8244+
validate: Optional[str] = None,
82378245
) -> DataFrame:
82388246
from pandas.core.reshape.merge import merge
82398247

pandas/core/reshape/merge.py

+51-45
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,13 @@
1313
import numpy as np
1414

1515
from pandas._libs import Timedelta, hashtable as libhashtable, join as libjoin, lib
16-
from pandas._typing import ArrayLike, FrameOrSeries, FrameOrSeriesUnion
16+
from pandas._typing import (
17+
ArrayLike,
18+
FrameOrSeries,
19+
FrameOrSeriesUnion,
20+
IndexLabel,
21+
Suffixes,
22+
)
1723
from pandas.errors import MergeError
1824
from pandas.util._decorators import Appender, Substitution
1925

@@ -57,19 +63,19 @@
5763
@Substitution("\nleft : DataFrame")
5864
@Appender(_merge_doc, indents=0)
5965
def merge(
60-
left,
61-
right,
66+
left: FrameOrSeriesUnion,
67+
right: FrameOrSeriesUnion,
6268
how: str = "inner",
63-
on=None,
64-
left_on=None,
65-
right_on=None,
69+
on: Optional[IndexLabel] = None,
70+
left_on: Optional[IndexLabel] = None,
71+
right_on: Optional[IndexLabel] = None,
6672
left_index: bool = False,
6773
right_index: bool = False,
6874
sort: bool = False,
69-
suffixes=("_x", "_y"),
75+
suffixes: Suffixes = ("_x", "_y"),
7076
copy: bool = True,
7177
indicator: bool = False,
72-
validate=None,
78+
validate: Optional[str] = None,
7379
) -> "DataFrame":
7480
op = _MergeOperation(
7581
left,
@@ -151,15 +157,15 @@ def _groupby_and_merge(by, on, left: "DataFrame", right: "DataFrame", merge_piec
151157

152158

153159
def merge_ordered(
154-
left,
155-
right,
156-
on=None,
157-
left_on=None,
158-
right_on=None,
160+
left: "DataFrame",
161+
right: "DataFrame",
162+
on: Optional[IndexLabel] = None,
163+
left_on: Optional[IndexLabel] = None,
164+
right_on: Optional[IndexLabel] = None,
159165
left_by=None,
160166
right_by=None,
161-
fill_method=None,
162-
suffixes=("_x", "_y"),
167+
fill_method: Optional[str] = None,
168+
suffixes: Suffixes = ("_x", "_y"),
163169
how: str = "outer",
164170
) -> "DataFrame":
165171
"""
@@ -294,17 +300,17 @@ def _merger(x, y):
294300

295301

296302
def merge_asof(
297-
left,
298-
right,
299-
on=None,
300-
left_on=None,
301-
right_on=None,
303+
left: "DataFrame",
304+
right: "DataFrame",
305+
on: Optional[IndexLabel] = None,
306+
left_on: Optional[IndexLabel] = None,
307+
right_on: Optional[IndexLabel] = None,
302308
left_index: bool = False,
303309
right_index: bool = False,
304310
by=None,
305311
left_by=None,
306312
right_by=None,
307-
suffixes=("_x", "_y"),
313+
suffixes: Suffixes = ("_x", "_y"),
308314
tolerance=None,
309315
allow_exact_matches: bool = True,
310316
direction: str = "backward",
@@ -583,17 +589,17 @@ def __init__(
583589
left: FrameOrSeriesUnion,
584590
right: FrameOrSeriesUnion,
585591
how: str = "inner",
586-
on=None,
587-
left_on=None,
588-
right_on=None,
589-
axis=1,
592+
on: Optional[IndexLabel] = None,
593+
left_on: Optional[IndexLabel] = None,
594+
right_on: Optional[IndexLabel] = None,
595+
axis: int = 1,
590596
left_index: bool = False,
591597
right_index: bool = False,
592598
sort: bool = True,
593-
suffixes=("_x", "_y"),
599+
suffixes: Suffixes = ("_x", "_y"),
594600
copy: bool = True,
595601
indicator: bool = False,
596-
validate=None,
602+
validate: Optional[str] = None,
597603
):
598604
_left = _validate_operand(left)
599605
_right = _validate_operand(right)
@@ -1224,7 +1230,7 @@ def _maybe_coerce_merge_keys(self):
12241230
self.right = self.right.assign(**{name: self.right[name].astype(typ)})
12251231

12261232
def _create_cross_configuration(
1227-
self, left, right
1233+
self, left: "DataFrame", right: "DataFrame"
12281234
) -> Tuple["DataFrame", "DataFrame", str, str]:
12291235
"""
12301236
Creates the configuration to dispatch the cross operation to inner join,
@@ -1540,17 +1546,17 @@ class _OrderedMerge(_MergeOperation):
15401546

15411547
def __init__(
15421548
self,
1543-
left,
1544-
right,
1545-
on=None,
1546-
left_on=None,
1547-
right_on=None,
1549+
left: "DataFrame",
1550+
right: "DataFrame",
1551+
on: Optional[IndexLabel] = None,
1552+
left_on: Optional[IndexLabel] = None,
1553+
right_on: Optional[IndexLabel] = None,
15481554
left_index: bool = False,
15491555
right_index: bool = False,
1550-
axis=1,
1551-
suffixes=("_x", "_y"),
1556+
axis: int = 1,
1557+
suffixes: Suffixes = ("_x", "_y"),
15521558
copy: bool = True,
1553-
fill_method=None,
1559+
fill_method: Optional[str] = None,
15541560
how: str = "outer",
15551561
):
15561562

@@ -1634,20 +1640,20 @@ class _AsOfMerge(_OrderedMerge):
16341640

16351641
def __init__(
16361642
self,
1637-
left,
1638-
right,
1639-
on=None,
1640-
left_on=None,
1641-
right_on=None,
1643+
left: "DataFrame",
1644+
right: "DataFrame",
1645+
on: Optional[IndexLabel] = None,
1646+
left_on: Optional[IndexLabel] = None,
1647+
right_on: Optional[IndexLabel] = None,
16421648
left_index: bool = False,
16431649
right_index: bool = False,
16441650
by=None,
16451651
left_by=None,
16461652
right_by=None,
1647-
axis=1,
1648-
suffixes=("_x", "_y"),
1653+
axis: int = 1,
1654+
suffixes: Suffixes = ("_x", "_y"),
16491655
copy: bool = True,
1650-
fill_method=None,
1656+
fill_method: Optional[str] = None,
16511657
how: str = "asof",
16521658
tolerance=None,
16531659
allow_exact_matches: bool = True,
@@ -2150,7 +2156,7 @@ def _validate_operand(obj: FrameOrSeries) -> "DataFrame":
21502156
)
21512157

21522158

2153-
def _items_overlap_with_suffix(left: Index, right: Index, suffixes: Tuple[str, str]):
2159+
def _items_overlap_with_suffix(left: Index, right: Index, suffixes: Suffixes):
21542160
"""
21552161
Suffixes type validation.
21562162

0 commit comments

Comments
 (0)