求助: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
相关产品推荐
相关产品推荐

