我对Pandas决定从数据框中进行选择是原始数据框的副本或原始数据视图时使用的规则感到困惑。
例如,如果我有
df = pd.DataFrame(np.random.randn(8,8), columns=list('ABCDEFGH'), index=range(1,9))
我了解a会query
传回副本,因此类似
foo = df.query('2 < index <= 5')
foo.loc[:,'E'] = 40
将对原始数据帧无效df
。我也了解标量或命名切片返回一个视图,因此对它们的赋值(例如
df.iloc[3] = 70
要么
df.ix[1,'B':'E'] = 222
会改变df
。但是当涉及到更复杂的案件时,我迷失了。例如,
df[df.C <= df.B] = 7654321
变化df
,但是
df[df.C <= df.B].ix[:,'B':'E']
才不是。
是否有一个熊猫正在使用的简单规则,我只是想念它?在这些特定情况下发生了什么;尤其是,如何更改满足特定查询的数据框中的所有值(或值的子集)(就像我在上面的最后一个示例中尝试的那样)?
注意:这和这个问题不一样;并且我已经阅读了文档,但并未对此有所启发。我还阅读了有关此主题的“相关”问题,但我仍然缺少Pandas使用的简单规则,以及如何将其应用于(例如)修改值(或值的子集)在满足特定查询的数据框中。
.query
将始终根据其执行的操作(而不是视图)返回副本,因为它由n numexpr求值。因此,我将其添加到“规则”中