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

无法从Pandas DataFrame中提取Backtrader生成的TradeHistory对象

提取Backtrader TradeHistory对象数据的方法

1. 先确认TradeHistory对象的可用属性

Backtrader的TradeHistory是自定义对象,首先得明确它包含哪些可提取的属性。取一条样本数据查看:

# 获取第一行的第一个TradeHistory对象
sample_trade = trade_data.iloc[0]['history'][0]
# 打印所有可用属性
print(dir(sample_trade))

通常会包含datetime(或dt)、size、price、symbol、sid这类核心交易属性,根据输出挑选你需要的字段。

2. 将TradeHistory列表转为结构化字典列表

定义一个转换函数,对history列的每个对象列表做解析:

def parse_trade_history(trade_list):
    # 根据实际属性调整字段
    return [
        {
            "trade_datetime": trade.dt.strftime("%Y-%m-%d %H:%M:%S"),
            "trade_size": trade.size,
            "trade_price": trade.price,
            "trade_symbol": trade.symbol
        }
        for trade in trade_list
    ]

# 生成解析后的列
trade_data['history_parsed'] = trade_data['history'].apply(parse_trade_history)

3. 展开为扁平DataFrame(每条交易占一行)

如果需要把嵌套的交易记录展开成常规的行结构,用explode结合json_normalize:

import pandas as pd
from pandas import json_normalize

# 将列表拆分为多行
exploded_df = trade_data.explode('history_parsed').reset_index(drop=True)
# 把字典列展开为独立字段
flattened_trades = json_normalize(exploded_df['history_parsed'])
# 合并原表其他字段
final_trade_df = pd.concat([exploded_df.drop('history_parsed', axis=1), flattened_trades], axis=1)

4. 快速提取单个属性的所有值

如果只需要某一个属性的集合(比如所有交易价格),用嵌套列表推导式:

all_trade_prices = [trade.price for trade_list in trade_data['history'] for trade in trade_list]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:01:22