有一个关于使用.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()
这将明确您的意图,而不会引发警告