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

求助:pandas DataFrame添加列后重新读取pkl文件无变化

问题原因
  • 核心原因是你仅修改了内存中的DataFrame对象,没有将修改后的结果写回原pkl文件。你通过pd.read_pickle读取文件后,所有新增列、dropna操作都只作用于当前程序运行时的内存数据,程序运行结束后内存数据自动释放,磁盘上的原pkl文件没有任何变更,因此后续读取的还是修改前的内容。
  • 次要问题:你定义的tradeable_pairs列表中存在重复值GBPNZD,会导致该交易对的文件被重复读取修改,属于冗余操作,建议先对列表去重。
修复方案

在循环内的df.dropna(inplace=True)之后,新增一行代码将修改后的DataFrame写回原pkl文件即可:

df.to_pickle(utils.get_his_data_filename(pair, "H1"))

修正后完整代码

import utils
import pandas as pd 

# 先对交易对列表去重
tradeable_pairs = list(set(["CADCHF", "CADJPY", "CHFJPY", "EURCAD", "EURCHF", "EURGBP", "EURJPY", "EURNZD", 
    "EURUSD", "GBPCAD", "GBPCHF", "GBPJPY", "GBPNZD", "GBPNZD", "GBPUSD", "NZDCAD", "NZDCHF",
    "NZDJPY", "NZDUSD", "USDCAD", "USDCHF", "USDJPY"]))

for pair in tradeable_pairs:
    file_path = utils.get_his_data_filename(pair, "H1")
    df = pd.read_pickle(file_path)
    df['EMA_LONG'] = df.close.ewm(span=26, min_periods=26).mean()
    df['EMA_SHORT'] = df.close.ewm(span=12, min_periods=12).mean()
    df['MACD'] = df.EMA_SHORT - df.EMA_LONG
    df['SIGNAL'] = df.MACD.ewm(span=9).mean()
    df['HIST'] = df.MACD - df.SIGNAL
    df.dropna(inplace=True)
    # 新增写入磁盘的步骤
    df.to_pickle(file_path)
验证方法

修改完成后再读取任意交易对的pkl文件,打印列名即可确认新增列是否存在:

df2 = pd.read_pickle(utils.get_his_data_filename("EURCHF", "H1"))
print(df2.columns)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:57:00