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

如何创建保留数据类型的空Pandas DataFrame模板?

问题修复方案

原代码报错的核心原因:empty方法中使用self()尝试创建新实例,但self是已实例化的对象,而非类本身,会触发TypeError: 'OpenOrder' object is not callable错误。

以下是三种可行的修改方案:

方案1:直接使用类名创建实例

修改empty方法中实例化的代码,用类名OpenOrder替代self:

import pandas as pd
import datetime
from dataclasses import dataclass

@dataclass
class OpenOrder:
    symbol: str = "Dummy"
    secType: str = "STK"
    dt: datetime.datetime = datetime.datetime.now()
    price: float = 0.0
    status: str = None

    def empty(self):
        open_ord = OpenOrder()  # 改用类名创建实例
        empty_df = pd.DataFrame([open_ord.__dict__])
        return empty_df.iloc[0:0]

调用方式保持不变:

open_order = OpenOrder()
order_df = open_order.empty()

方案2:转为类方法(更推荐)

将empty定义为类方法,无需先实例化类即可生成空模板,更符合场景逻辑:

import pandas as pd
import datetime
from dataclasses import dataclass

@dataclass
class OpenOrder:
    symbol: str = "Dummy"
    secType: str = "STK"
    dt: datetime.datetime = datetime.datetime.now()
    price: float = 0.0
    status: str = None

    @classmethod
    def empty(cls):
        open_ord = cls()  # 用cls指代当前类,避免硬编码类名
        empty_df = pd.DataFrame([open_ord.__dict__])
        return empty_df.iloc[0:0]

调用时直接通过类调用:

order_df = OpenOrder.empty()

方案3:直接从dataclass字段构建(更高效)

无需创建实例,直接提取dataclass的字段类型构建空DataFrame,性能更优:

import pandas as pd
import datetime
from dataclasses import dataclass, fields

@dataclass
class OpenOrder:
    symbol: str = "Dummy"
    secType: str = "STK"
    dt: datetime.datetime = datetime.datetime.now()
    price: float = 0.0
    status: str = None

    @classmethod
    def empty(cls):
        # 提取所有字段的类型映射
        dtype_map = {field.name: field.type for field in fields(cls)}
        return pd.DataFrame([], dtype=dtype_map)

调用方式同方案2,最终生成的空DataFrame会严格保留每个字段的原始数据类型。

内容的提问来源于stack exchange,提问作者reservoirinvest

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 06:10:58