类型提示 pandas 具有特定列的数据框

Type hinting pandas dataframe with specific columns

假设我有以下功能:

def foo(df: pd.DataFrame) -> pd.DataFrame:
    x = df["x"]
    y = df["y"]
    df["xy"] = x * y

    return df

有什么方法可以提示我的函数正在接受一个必须有“x”和“y”列的数据框,并且它将 return 一个带有“x”的数据框, “y”和“xy”列,而不仅仅是一个通用数据框?

好的,我不确定这是否是正确的实施方式,但似乎对我有用。如果您发现任何错误或替代方法,请告诉我,我可以编辑回复,但我的解决方案基本上是创建一个新的 class 并实施 Pep 560 中看到的 __class_getitem__ 方法,这是我的最终代码:

from typing import List
import pandas as pd


GenericAlias = type(List[str])

class MyDataFrame(pd.DataFrame):
    __class_getitem__ = classmethod(GenericAlias)


def foo(df: MyDataFrame[["x", "y"]]) -> MyDataFrame[["x", "y", "xy"]]:
    df["xy"] = df["x"] * df["y"]
    return df