Python 熊猫系列.loc[[0,1]]与.loc[0:1]

Python 熊猫系列.loc[[0,1]]与.loc[0:1],python,pandas,indexing,slice,Python,Pandas,Indexing,Slice,tl;dr:为什么.loc[[0,1]]似乎在创建副本,而.loc[0:1]似乎在创建引用 在搜索的答案时,我发现.loc[[0,1]]的行为与.loc[0:1]不同。例如,如果我有一个熊猫系列,例如: >>将熊猫作为pd导入 >>>my_系列=pd系列(dict(x=0,y=1,z=2)) >>>my_系列 x0 y 1 z 2 数据类型:int64 我使用.loc['x','y']]对其进行索引,这似乎创建了一个副本 my_series=pd.series(dict(x=0,y=1,z=

tl;dr:为什么
.loc[[0,1]]
似乎在创建副本,而
.loc[0:1]
似乎在创建引用


在搜索的答案时,我发现
.loc[[0,1]]
的行为与
.loc[0:1]
不同。例如,如果我有一个熊猫系列,例如:

>>将熊猫作为pd导入
>>>my_系列=pd系列(dict(x=0,y=1,z=2))
>>>my_系列
x0
y 1
z 2
数据类型: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 >>>参考文献 x0 y 1 数据类型: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 >>>参考文献 x10 y 1 数据类型:int64 这是怎么回事


省略
.loc
的行为与中相同

>>reference=my_系列[['x','y']]

>reference=my_系列['x':'y']


我在文档中看到了这个页面,但它没有解释观察到的行为差异。

确保在创建第二个引用之前将
my_series.x
重置为
0
,否则即使它返回了一个副本
x
也将是
10
“除了简单的情况外,很难预测它将返回一个视图还是一个副本(这取决于阵列的内存布局,pandas对此没有保证)。。。“我一般认为,但我找不到确切的视图返回时间与副本返回时间的文档。由于
pandas
在下面使用
numpy
,我认为这种行为与numpy数组处理奇特的索引(即使用索引数组访问元素)是一致的。您可以在这里找到一些文档:问题当然是一个切片有一个已知的(连续的)结构,但是使用列表进行索引不能如此高效地表达?