使用loc时的Pandas SettingWithCopyWarning警告
我有一个关于使用 .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()
这样做可以让你的意图更加明确,并且不会引发警告。