Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions pandas-stubs/_typing.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -837,4 +837,7 @@ ExcelWriteEngine: TypeAlias = Literal["openpyxl", "odf", "xlsxwriter"]
# https://github.com/pandas-dev/pandas-stubs/pull/1151#issuecomment-2715130190
TimeZones: TypeAlias = str | tzinfo | None | int

# Evaluates to ArrayLike in DataFrame.assign context.
IntoArrayLike: TypeAlias = AnyArrayLike | Callable[[DataFrame], AnyArrayLike]
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

related, I had a bit of fun with this in https://github.com/MarcoGorelli/pandas_col 😄


__all__ = ["npt", "type_t"]
3 changes: 2 additions & 1 deletion pandas-stubs/core/frame.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ from pandas._typing import (
InterpolateOptions,
IntervalClosedType,
IntervalT,
IntoArrayLike,
JoinHow,
JsonFrameOrient,
Label,
Expand Down Expand Up @@ -728,7 +729,7 @@ class DataFrame(NDFrame, OpsMixin, _GetItemHack):
value: Scalar | ListLikeU | None,
allow_duplicates: _bool = ...,
) -> None: ...
def assign(self, **kwargs) -> Self: ...
def assign(self, **kwargs: IntoArrayLike) -> Self: ...
def align(
self,
other: NDFrameT,
Expand Down
27 changes: 27 additions & 0 deletions tests/test_frame.py
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,33 @@ def test_types_assign() -> None:
df["col3"] = df.sum(axis=1)


def test_assign() -> None:
df = pd.DataFrame({"a": [1, 2, 3], 1: [4, 5, 6]})

my_unnamed_func = lambda df: df["a"] * 2

def my_named_func_1(df: pd.DataFrame) -> pd.Series[str]:
return df["a"]

def my_named_func_2(df: pd.DataFrame) -> pd.Series[Any]:
return df["a"]

check(assert_type(df.assign(c=lambda df: df["a"] * 2), pd.DataFrame), pd.DataFrame)
check(
assert_type(df.assign(c=lambda df: df["a"].index), pd.DataFrame), pd.DataFrame
)
check(
assert_type(df.assign(c=lambda df: df["a"].to_numpy()), pd.DataFrame),
pd.DataFrame,
)
check(assert_type(df.assign(c=df["a"] * 2), pd.DataFrame), pd.DataFrame)
check(assert_type(df.assign(c=df["a"].index), pd.DataFrame), pd.DataFrame)
check(assert_type(df.assign(c=df["a"].to_numpy()), pd.DataFrame), pd.DataFrame)
check(assert_type(df.assign(c=my_unnamed_func), pd.DataFrame), pd.DataFrame)
check(assert_type(df.assign(c=my_named_func_1), pd.DataFrame), pd.DataFrame)
check(assert_type(df.assign(c=my_named_func_2), pd.DataFrame), pd.DataFrame)


def test_types_sample() -> None:
df = pd.DataFrame(data={"col1": [1, 2], "col2": [3, 4]})
# GH 67
Expand Down