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

新手上路,请多包涵

从父数据帧中选择子数据帧时,我注意到一些程序员使用 .copy() 方法复制数据帧。例如,

 X = my_dataframe[features_list].copy()

…而不仅仅是

X = my_dataframe[features_list]

他们为什么要复制数据框?如果我不复制会怎样?

原文由 Elizabeth Susan Joseph 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 724
2 个回答

这扩展了保罗的回答。在 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

这个答案在新版本的熊猫中已被弃用。查看 文档

原文由 cgold 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

例如:

 df2 = df
func1(df2)
func2(df)

func1可以通过修改df2来修改df,所以要避免:

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

原文由 sparrow 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题