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

YOLOv5预测结果处理:用concat替代append是否可行?

问题解答

首先明确:在你这个场景下,用concat替代append不仅有意义,而且是必须的——因为pandas从2.0版本开始已经标记append方法为弃用状态,未来版本会直接移除这个API,现在靠忽略警告只是临时方案,早迁移早避免后续兼容性问题。

逐行迭代场景下的concat替代写法

你原来的代码每次循环都用append拼接DataFrame,这种写法本身效率极低(每次拼接都会重新创建新的DataFrame对象,内存和时间消耗都大)。用concat替代的正确姿势是先把符合条件的行收集到列表,最后一次性拼接,而非逐次循环拼接:

pred0 = car_model(frame, augment=False)
results_df = pred0.pandas().xyxy[0]  # 先把预测结果转成DataFrame存起来,避免重复调用
filtered_rows = []
for _, row in results_df.iterrows():
    if row['confidence'] > confidence:
        filtered_rows.append(row)

# 最后一次性拼接所有符合条件的行
pred_df = pd.DataFrame(filtered_rows) if filtered_rows else pd.DataFrame()

更优的方案:放弃逐行迭代,用pandas布尔索引直接筛选

其实你完全没必要逐行迭代——pandas的核心优势就是向量化操作,直接用布尔索引筛选比循环高效得多,代码也更简洁:

pred0 = car_model(frame, augment=False)
results_df = pred0.pandas().xyxy[0]
# 直接用布尔条件筛选置信度符合要求的行
pred_df = results_df[results_df['confidence'] > confidence].reset_index(drop=True)

这种写法既避免了append的弃用警告,又彻底解决了循环迭代的性能问题,是pandas的标准用法。

总结

  • 不管用哪种方式,都应该替换掉append,避免未来版本的兼容性问题;
  • 逐行迭代场景下,「先收集列表再一次性concat」的写法,比逐次拼接高效;
  • 优先选择布尔索引的向量化筛选,这才是最符合pandas设计理念的写法,性能和可读性都更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 06:06:07