为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我要在pandas中复制一个数据框

为什么我要在pandas中复制一个数据框

慕侠2389804 2019-09-20 17:30:24
从父数据帧中选择子数据帧时,我注意到一些程序员使用该.copy()方法复制数据帧。他们为什么要复制数据框?如果我不复制会怎么样?
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

这扩展了保罗的答案。在Pandas中,索引DataFrame会返回对初始DataFrame的引用。因此,更改子集将更改初始DataFrame。因此,如果要确保初始DataFrame不应更改,则需要使用该副本。请考虑以下代码:


df = DataFrame({'x': [1,2]})

df_sub = df[0:1]

df_sub.x = -1

print(df)

你会得到:


x

0 -1

1  2

相反,以下叶子df不变:


df_sub_copy = df[0:1].copy()

df_sub_copy.x = -1


查看完整回答
反对 回复 2019-09-20
?
心有法竹

TA贡献1866条经验 获得超5个赞

因为如果您不复制,那么即使您将dataFrame分配给其他名称,索引仍然可以在其他地方操作。


例如:


df2 = df

func1(df2)

func2(df)

func1可以通过修改df2来修改df,所以为了避免这种情况:


df2 = df.copy()

func1(df2)

func2(df)


查看完整回答
反对 回复 2019-09-20
?
FFIVE

TA贡献1797条经验 获得超6个赞

有必要提一下,返回的副本或视图取决于索引的类型。

熊猫文档说:

返回视图与副本

关于何时返回数据视图的规则完全取决于NumPy。每当索引操作中涉及标签数组或布尔向量时,结果将是副本。使用单标签/标量索引和切片,例如df.ix [3:6]或df.ix [:,'A'],将返回视图。


查看完整回答
反对 回复 2019-09-20
  • 3 回答
  • 0 关注
  • 1511 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信