选择数据框的一部分以获取视图,而不是副本

卢卡什(LukášZavřel)

如何选择原始变量“ 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

谢谢!

cs95

重要的第一点是,loc(通过扩展,ilocat,和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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章