我对 Pandas 在决定数据帧中的选择是原始数据帧的副本或原始数据帧的视图时使用的规则感到困惑。
例如,如果我有,
df = pd.DataFrame(np.random.randn(8,8), columns=list('ABCDEFGH'), index=range(1,9))
我明白,一个query
返回一个副本,这样就像
foo = df.query('2 < index <= 5')
foo.loc[:,'E'] = 40
对原始数据框没有影响,df
。我还了解标量或命名切片返回一个视图,以便对这些进行赋值,例如
df.iloc[3] = 70
or
df.ix[1,'B':'E'] = 222
会改变df
。但当涉及到更复杂的情况时,我就迷失了。例如,
df[df.C <= df.B] = 7654321
changes df
, but
df[df.C <= df.B].ix[:,'B':'E']
才不是。
Pandas 是否使用了我所缺少的简单规则?这些具体案例中发生了什么;特别是,如何更改数据框中满足特定查询的所有值(或值的子集)(正如我在上面的最后一个示例中尝试做的那样)?
注意:这与这个问题 https://stackoverflow.com/q/17960511/656912;我已经读过文档 http://pandas.pydata.org/pandas-docs/dev/indexing.html#returning-a-view-versus-a-copy,但我并没有受到启发。我还阅读了有关此主题的“相关”问题,但我仍然缺少 Pandas 使用的简单规则,以及如何将其应用于(例如)修改值(或值的子集)在满足特定查询的数据框中。