当使用loc时,Pandas设置withcopywarning



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

假设下面的DataFrame, 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'

分配工作,但我收到SettingWithCopy警告。是我做错了什么,还是这是预期的功能?我认为使用。loc可以避免链式赋值。我是不是漏掉了什么?我使用的是Pandas 14.1

@EdChum在OP的评论中回答已经解决了问题。即替换

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

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

这将明确您的意图,而不会引发警告

最新更新