从父数据帧中选择子数据帧时,我注意到一些程序员使用该.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
心有法竹
TA贡献1866条经验 获得超5个赞
因为如果您不复制,那么即使您将dataFrame分配给其他名称,索引仍然可以在其他地方操作。
例如:
df2 = df
func1(df2)
func2(df)
func1可以通过修改df2来修改df,所以为了避免这种情况:
df2 = df.copy()
func1(df2)
func2(df)
FFIVE
TA贡献1797条经验 获得超6个赞
有必要提一下,返回的副本或视图取决于索引的类型。
熊猫文档说:
返回视图与副本
关于何时返回数据视图的规则完全取决于NumPy。每当索引操作中涉及标签数组或布尔向量时,结果将是副本。使用单标签/标量索引和切片,例如df.ix [3:6]或df.ix [:,'A'],将返回视图。
添加回答
举报
0/150
提交
取消