我为什么要在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'],将返回一个视图。