You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为含指定列的Pandas DataFrame添加类型提示

可行实现方案有以下三种,可根据你的项目依赖版本、校验需求选择:

方案1:Pandas 原生类型标注(Pandas 2.0+ 适用)

Pandas 2.0 及以上版本原生支持泛型 DataFrame 类型,配合 pandas-stubs 可以让 mypy、pyright 等静态类型检查器识别列结构约束:

import pandas as pd
from pandas.api.typing import DataFrame

# 定义入参 DataFrame 类型:包含 x、y 两列,类型为64位浮点数
InputDF = DataFrame[
    [("x", pd.Float64Dtype), ("y", pd.Float64Dtype)]
]
# 定义返回值 DataFrame 类型:额外新增 xy 列
OutputDF = DataFrame[
    [("x", pd.Float64Dtype), ("y", pd.Float64Dtype), ("xy", pd.Float64Dtype)]
]

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

特点:无额外第三方依赖(仅需安装开发依赖 pandas-stubs),静态检查覆盖完整,运行时无额外性能损耗。


方案2:Pandera 运行时+静态双校验

如果需要运行时也自动校验列结构和字段类型,可以用专门面向 Pandas 的校验库 pandera:

import pandas as pd
import pandera as pa
from pandera.typing import DataFrame, Series

# 定义入参结构约束
class InputSchema(pa.DataFrameModel):
    x: Series[float]
    y: Series[float]

# 继承入参结构,新增返回值要求的 xy 列
class OutputSchema(InputSchema):
    xy: Series[float]

# 装饰器开启运行时自动校验
@pa.check_types
def foo(df: DataFrame[InputSchema]) -> DataFrame[OutputSchema]:
    x = df["x"]
    y = df["y"]
    df["xy"] = x * y
    return df

特点:除了静态类型提示,传入数据不符合结构时会直接抛出清晰的校验错误,避免后续取列、计算时才触发难以定位的报错,适合对数据正确性要求高的场景。


方案3:Annotated 标记(低版本 Pandas 兼容方案)

如果使用的 Pandas 版本低于 2.0,无法使用原生泛型标注,可以用 typing.Annotated 给通用 pd.DataFrame 增加显式结构标记:

from typing import Annotated
import pandas as pd

# 用字符串标注结构约束,供开发者和工具识别
InputDF = Annotated[pd.DataFrame, "必须包含x、y两列,均为数值类型"]
OutputDF = Annotated[pd.DataFrame, "必须包含x、y、xy三列,均为数值类型"]

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

特点:兼容性最强,所有 Python 3.9+ 版本都支持,仅作为显式的结构说明,无强制静态/运行时校验,适合临时项目或者依赖版本受限的场景。

内容的提问来源于stack exchange,提问作者João Areias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:24:04