如何选择原始变量“ frame”的一部分,以便更改“ frame2”也将更改“ frame”?以下无效。
import pandas as pd
frame = pd.DataFrame([[1,2,3],[1,5,6], [7,8,9]])
frame2 = frame.loc[frame.loc[:,0] == 1]
frame2.loc[:,1] = -99
谢谢!
重要的第一点是,loc
(通过扩展,iloc
,at
,和iat
)总是会返回一个副本。
如果要查看,则必须frame
通过进行索引__getitem__
。现在,即使这样也不能保证返回视图或副本-这是实现细节,而且不容易分辨。
在以下索引操作之间,
frame2 = frame[frame.iloc[:,0] == 1]
frame3 = frame[frame > 0]
frame4 = frame2[[0, 1]]
frame2._is_view
# False
frame3._is_view
# True
frame4._is_view
# False
只是frame3
一个视图。细节还取决于dtypes和其他因素(例如切片的形状),但这是一个明显的区别。
尽管frame3
有观点,但对其进行修改可能不会起作用,但它们永远不会导致对的更改frame
。开发人员已进行了大量检查(最著名的是SettingWithCopyWarning),以防止由于修改视图而产生意外副作用。
frame3.iloc[:, 1] = 12345
frame3
0 1 2
0 1 12345 3
1 1 12345 6
2 7 12345 9
frame
0 1 2
0 1 2 3
1 1 5 6
2 7 8 9
TLDR;请寻找另一种方法来做您想做的事。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句