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

如何解决Pandas中的SettingWithCopyWarning告警?

解决DataFrame创建新列时的SettingWithCopyWarning告警

这个警告的核心原因是:你当前操作的tcep不是原始DataFrame,而是从其他DataFrame切片得到的视图/副本,pandas无法确定你要修改的是副本还是原数据,因此抛出警告。

以下是几种有效的解决方法:

  • 方法一:创建tcep时显式生成副本
    如果tcep是通过类似df[df['condition']]这种切片方式得到的,在创建时就加上.copy(),明确生成独立副本:

    # 示例:替换你原来创建tcep的代码
    tcep = 原DataFrame[筛选条件].copy()
    

    之后再执行添加新列的代码,就不会触发警告了。

  • 方法二:用.loc明确指定赋值范围
    不需要修改tcep的创建代码,直接用loc[:, 列名]的方式赋值,明确告诉pandas要修改的是整个列:

    tcep.loc[:, 'time_difference'] = (pd.to_datetime(tcep['time_end']) - pd.to_datetime(tcep['time_start'])).dt.days
    
  • 修正你尝试的apply代码(不推荐,效率低)
    你之前的apply代码存在语法错误,修正后结合.loc使用也能解决警告,但apply的运算效率远低于向量运算,仅作参考:

    tcep.loc[:, 'time_difference'] = tcep.apply(lambda row: (pd.to_datetime(row.time_end) - pd.to_datetime(row.time_start)).days, axis=1)
    

验证问题根源:可以通过以下代码确认tcep是否为视图:

print(tcep._is_view)

如果输出True,说明tcep是原DataFrame的视图,这就是触发警告的直接原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:07:33