假设我们有这样一个数据帧:
dataset = pd.DataFrame({'A':[5,5,5,5,5,5],
'B':[1,2,3,4,5,6]})
dataset
A B
0 5 1
1 5 2
2 5 3
3 5 4
4 5 5
5 5 6
得到1到4的正常切片可以给我们
ds = dataset[1:4]
ds
A B
1 5 2
2 5 3
3 5 4
当通过布尔索引获取切片时,我们可以
sliced = dataset.loc[dataset['B'] % 2 == 0]
sliced
A B
1 5 2
3 5 4
5 5 6
我正在try 使用通过布尔索引方法获得的切片来编辑原始数据集.当使用普通切片时,它的工作方式与预期相同
ds.loc[1,'A'] = 10
ds
A B
1 10 2
2 5 3
3 5 4
dataset
A B
0 5 1
1 10 2
2 5 3
3 5 4
4 5 5
5 5 6
但在编辑布尔索引切片时,它不会更改原始切片
sliced.loc[1,'A'] = 10
sliced
A B
1 10 2
3 5 4
5 5 6
dataset
A B
0 5 1
1 5 2
2 5 3
3 5 4
4 5 5
5 5 6
我在文档中找不到任何关于布尔索引创建副本而不是视图的内容(我甚至不完全确定这是否是正确的术语).我试着将.loc添加到切片中,但似乎没有任何改变.我甚至try 了ds._is_Copy()和Sliced._is_Copy(),但它们都返回相同的内容,即对原始数据帧的弱引用.._is_view似乎几乎是随机返回True或False,但根据源代码,它似乎并不太可靠.
Def is_view(Self)->;bool:
"如果我可能是视图,则返回布尔值"