使用loc时的Pandas SettingWithCopyWarning

Mat*_*ttB 9 python indexing pandas

使用.loc对索引/切片的赋值进行一般性提问.

假设下面的DataFrame,df:

df:    
    A   B   C
0   a   b   
1   a   b   
2   b   a   
3   c   c   
4   c   a   
Run Code Online (Sandbox Code Playgroud)

代码重现:

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

我使用以下方法创建df1:

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

df1:
    A   B   C
3   c   c   
4   c   a   
Run Code Online (Sandbox Code Playgroud)

然后我根据B中的值为C赋值:

df1.loc[df1.B=='a','C']='d'
Run Code Online (Sandbox Code Playgroud)

赋值有效,但我收到了SettingWithCopy警告.我做错了什么或这是预期的功能?我认为使用.loc会避免链接赋值.有什么东西我错过了吗?我正在使用熊猫14.1

Yuv*_*mon 5

对OP的评论中的@EdChum答案已解决了该问题。即替换

df1=df.loc[df.A=='c']
Run Code Online (Sandbox Code Playgroud)

df1=df.loc[df.A=='c'].copy()
Run Code Online (Sandbox Code Playgroud)

这将使您的意图清晰明了,并且不会发出警告