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

使用.iloc给DataFrame赋值触发SettingWithCopyWarning如何解决?

警告出现的原因

你用到了链式索引操作:pamap2_df["heartrate"].iloc[0:4] = 100 是分两步完成索引的,第一步先取heartrate列,第二步再对返回的结果取前4行赋值。pandas在取单列的步骤中,无法保证返回的是原DataFrame的视图还是独立副本,如果返回的是副本,你的赋值操作只会修改副本,不会作用到原pamap2_df上,和你的预期不符。哪怕你这次运行实际修改成功了,这种操作模式依然存在潜在失效风险,所以pandas会抛出SettingWithCopyWarning提醒你注意该问题。

避免警告的解决方案

  • 方案1:使用pandas推荐的一次性索引写法,拆分链式操作
    如果你要按位置取前4行修改heartrate列,可以用iloc合并列定位:
    pamap2_df.iloc[0:4, pamap2_df.columns.get_loc("heartrate")] = 100
    
    如果你使用的是默认整数行索引,也可以用loc写法:
    pamap2_df.loc[0:3, "heartrate"] = 100
    
  • 方案2:如果pamap2_df本身是你从其他DataFrame中筛选出来的切片,生成它的时候主动调用.copy()声明是独立副本:
    # 假设你是通过筛选得到的pamap2_df,末尾加.copy()
    pamap2_df = other_df[筛选条件].copy()
    # 后续再执行赋值操作就不会触发警告
    pamap2_df["heartrate"].iloc[0:4]=100
    
  • 方案3:确认当前操作符合预期的前提下,主动关闭该类警告
    import pandas as pd
    pd.set_option('mode.chained_assignment', None)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:15:04