我为什么要在pandas里复制一个数据框呢?

从父数据框中select子数据框时。 我注意到一些程序员正在使用.copy()方法复制数据框。 他们为什么要复制数据框? 如果我不做副本会发生什么?

这扩大了保罗的答案。 在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_sub_copy = df[0:1].copy() df_sub_copy.x = -1 

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

例如:

 df2 = df func1(df2) func2(df) 

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

 df2 = df.copy() func1(df2) func2(df) 

有必要提到,返回复制或视图取决于索引的种类。

pandas文档说:

返回一个视图与副本

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