您的答案在于熊猫文档:returning-a-view-versus-a-copy。
每当索引操作涉及标签数组或布尔向量时, 结果将为copy 。使用单个标签/标量索引和切片,例如df.ix [3:6]或df.ix
[:,’A’], 将返回一个视图 。
在您的示例中,
bar是的切片 视图
foo。如果您想要一个 副本
,则可以使用该
copy方法。修改
bar也会修改
foo。熊猫似乎没有写时复制机制。
请参阅下面的代码示例进行说明:
In [1]: import pandas as pd ...: import numpy as np ...: foo = pd.Dataframe(np.random.random((10,5))) ...:In [2]: pd.__version__Out[2]: '0.12.0.dev-35312e4'In [3]: np.__version__Out[3]: '1.7.1'In [4]: # Dataframe has copy method ...: foo_copy = foo.copy()In [5]: bar = foo.iloc[3:5,1:4]In [6]: bar == foo.iloc[3:5,1:4] == foo_copy.iloc[3:5,1:4]Out[6]: 1 2 33 True True True4 True True TrueIn [7]: # Changing the view ...: bar.ix[3,1] = 5In [8]: # View and Dataframe still equal ...: bar == foo.iloc[3:5,1:4]Out[8]: 1 2 33 True True True4 True True TrueIn [9]: # It is now different from a copy of original ...: bar == foo_copy.iloc[3:5,1:4]Out[9]: 1 2 33 False True True4 True True True



