这是规则,后续优先事项:
所有操作都会生成一个副本
如果
inplace=True
提供,它将就地修改;只有一些操作支持设置的索引器,例如
.loc/.iloc/.iat/.at
将原地设置。到达单一类型对象的索引器几乎总是一个视图(取决于内存布局,可能不正是这个原因,这是不可靠的原因)。这主要是为了提高效率。(上面的示例用于
.query
;它将 始终 返回的副本,其值为numexpr
)到达多类型对象的索引器始终是副本。
您的例子
chained indexing
df[df.C <= df.B].loc[:,'B':'E']
不能保证能正常工作(因此,您应该 永远 不要这样做)。
而是:
df.loc[df.C <= df.B, 'B':'E']
因为这 更快, 并且将始终有效
链式索引是2个单独的python操作,因此无法被熊猫可靠地拦截(您通常会得到
SettingWithCopyWarning,但也不是100%可检测到的)。您所指出的dev文档提供了更全面的说明。



