tl; dr:为什么.loc[[0,1]]
似乎创建副本,而.loc[0:1]
似乎创建引用?
在寻找this question的答案时,我发现.loc[[0,1]]
的行为与.loc[0:1]
不同。例如,如果我有一个熊猫系列,例如:
>>> import pandas as pd
>>> my_series = pd.Series(dict(x=0, y=1, z=2))
>>> my_series
x 0
y 1
z 2
dtype: int64
然后我使用.loc[['x','y']]
对其进行索引,这似乎可以创建一个副本
>>> my_series = pd.Series(dict(x=0, y=1, z=2))
>>> reference = my_series.loc[['x', 'y']]
>>> my_series.x = 10
>>> reference
x 0
y 1
dtype: int64
而当我使用.loc['x':'y']
对其进行索引时,这似乎会创建一个引用
>>> my_series = pd.Series(dict(x=0, y=1, z=2))
>>> reference = my_series.loc['x':'y']
>>> my_series.x = 10
>>> reference
x 10
y 1
dtype: int64
这是怎么回事?
与{p>一样,相同的行为仍然存在,省略了.loc
>>> reference = my_series[['x', 'y']]
和
>>> reference = my_series['x':'y']
我已经在文档Returning a view versus a copy中看到了此页面,但是它没有解释观察到的行为差异。