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

如何使用pandas的concat()方法替换已废弃的append方法改写代码?

pandas废弃append后用concat改写的实现方案

pandas从1.4.0版本开始正式废弃DataFrame.append()方法,所有行拼接场景官方统一推荐使用pandas.concat()实现,你的原代码逻辑可以直接按如下方式改写,运行结果和原代码完全一致:

def gettrigger(self):
    mask_collection = []
    for i in range(self.lags + 1):
        mask = (self.df['%K'].shift(i) < 20) & (self.df['%D'].shift(i) < 20)
        mask_collection.append(mask)
    dfx = pd.concat(mask_collection, ignore_index=True)
    return dfx.sum(axis=0)

写法说明

  • 不要在循环里逐次调用concat()拼接数据,这种写法和原来逐次append一样,每次循环都会复制全量数据,性能极差。正确做法是先把所有待拼接的Series/DataFrame存入一个列表,循环结束后一次性调用concat()完成拼接,数据量较大时性能差距可以达到数十倍。
  • 这里concat()默认按行方向拼接(参数axis=0),和原append的拼接逻辑完全匹配,搭配ignore_index=True即可实现和原方法一致的索引重置效果,不会保留原每个mask的索引,避免拼接后索引重复。

更高效的向量化实现

你的需求本质是统计多个滞后期下%K和%D同时小于20的期数,完全可以跳过逐行拼接的步骤,直接用pandas向量化运算实现,代码更简洁、运行速度更快:

def gettrigger(self):
    # 一次性生成所有滞后期的K、D值矩阵
    k_matrix = pd.concat([self.df['%K'].shift(i) for i in range(self.lags + 1)], axis=1)
    d_matrix = pd.concat([self.df['%D'].shift(i) for i in range(self.lags + 1)], axis=1)
    # 直接按行统计同时满足两个条件的数量
    return ((k_matrix < 20) & (d_matrix < 20)).sum(axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:24:21