使用loc时的Pandas SettingWithCopyWarning警告

17 投票
1 回答
7359 浏览
提问于 2025-04-18 18:27

我有一个关于使用 .loc 进行索引和切片赋值的一般性问题。

假设下面是一个数据表,叫做 df:

df:    
    A   B   C
0   a   b   
1   a   b   
2   b   a   
3   c   c   
4   c   a   

生成这个数据表的代码:

df = pd.DataFrame({'A':list('aabcc'), 'B':list('bbaca'), 'C':5*[None]})

我用以下代码创建了 df1:

df1=df.loc[df.A=='c']

df1:
    A   B   C
3   c   c   
4   c   a   

然后,我根据 B 列的一个值给 C 列赋值,使用的是:

df1.loc[df1.B=='a','C']='d'

赋值是成功的,但我收到了一个关于“设置副本”的警告。我是做错了什么,还是这就是正常的功能?我以为使用 .loc 可以避免链式赋值。是不是我漏掉了什么?我使用的是 Pandas 14.1。

1 个回答

11

@EdChum 在评论中给出的答案解决了这个问题。

也就是说,把

df1=df.loc[df.A=='c']

替换成

df1=df.loc[df.A=='c'].copy()

这样做可以让你的意图更加明确,并且不会引发警告。

撰写回答