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

如何为datetime.date索引的Pandas DataFrame设置行值并解决赋值报错?

解决Pandas设置行值的SettingWithCopyError问题

问题背景

现有如下Pandas DataFrame,索引为datetime.date类型,需要将最后一行设置为NaN值:

EURGBP  EURCAD    GBPEUR    GBPCAD
date                                           
2018-06-22  0.87663  1.5459  1.140732  1.763458
2018-06-25  0.88040  1.5542  1.135847  1.765334
2018-06-26  0.88160  1.5549  1.134301  1.763725
2024-05-06  0.55550  0.4444  1.800180  0.800000

尝试通过链式索引赋值时出现错误:

df['EURGBP'].iloc[3] = 'NAN'
df['EURCAD'].iloc[3] = 'NAN'

第二条命令抛出:

pandas.core.common.SettingWithCopyError: 
A value is trying to be set on a copy of a slice from a DataFrame

正确解决方法

方法1:通过索引直接设置整行值

利用索引定位目标行,直接赋值为NaN(推荐使用np.nan或pd.NA,而非字符串'NAN'):

import numpy as np
# 也可使用 pd.NA 替代 np.nan
df.loc[pd.Timestamp("2024-05-06")] = np.nan

方法2:通过iloc定位最后一行(更通用)

无需指定具体日期,直接定位最后一行:

df.iloc[-1] = np.nan

方法3:单独设置指定列的行值

如果只需要修改部分列,用loc同时指定索引和列名:

df.loc[pd.Timestamp("2024-05-06"), ['EURGBP', 'EURCAD']] = np.nan

错误原因说明

之前的链式索引df['EURCAD'].iloc[3]属于两次切片操作:先取出EURCAD列(可能返回原DataFrame的副本),再通过iloc定位行。修改副本不会同步到原DataFrame,因此Pandas抛出SettingWithCopyError警告。而loc/iloc是直接从原DataFrame定位元素,避免了副本问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:37:04