关于使用.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
df1
被修改了,但df
没有被修改,这不是您想要的结果。您已经将df1
分配为对df
的切片的引用,但现在执行loc
分配只修改了df1
,这让我感觉像是一个错误,但我不能确定这是否是有意为之。 - EdChumdf1=df.loc[df.A=='c'].copy()
这样做会清楚地表达你的意图,并且不会引发警告。 - EdChum