python-3.x 当你在一个带有Pandas的行数据上使用.remove时,df.copy()是如何工作的?

gkn4icbw  于 2023-03-04  发布在  Python
关注(0)|答案(1)|浏览(105)

我尝试复制df来删除副本中的数据而不影响原始文件,但是我做了很多测试,结果总是改变副本和原始文件,代码如下:

import copy
data = {"name": [["Sally", "EYE", "FACE"], ["Mary", "John"]]],
    "qualified": [True, False]]}
df = pd.DataFrame(data)
new_df = copy.deepcopy(df)
#new_df = df.copy() #new_df = df.copy(deep=True)
for i in range(0, len(new_df)):
    for j in new_df['name'][i]:
       new_df['name'][i].remove(j)         
print("\nNEWDF: ", newdf)
print("\nDF: ", df)

结果:

  • 新数据框:name qualified 0 [EYE] True 1 [John] False
  • 数据框:name qualified 0 [EYE] True 1 [John] False

这样做总是修改原始文件,为什么不只修改副本呢?
我曾尝试使用以下方法求解:

  • new_df =副本.深度副本(df)
  • new_df = df.复制()
  • new_df = df.拷贝(深度=真)

并且使用原件而不是副本。结果总是一样的。
我想让它出来:

  • 数据框:name qualified 0 [Sally, EYE, FACE] True 1 [Mary, John] False
  • 新数据框:name qualified 0 [EYE] True 1 [John] False
t40tm48m

t40tm48m1#

你可以通过先创建一个dict,然后在dict上调用deepcopy来实现deepcopy(不知道在df上的y deepcopy不能正常工作):

new_df = pd.DataFrame(copy.deepcopy(df.to_dict()))

编辑:
如果您阅读了panda复制方法的参考:它说对于python对象不执行深度复制,现在调用python deepcopy委托给NDFrame类的一个deepcopy属性,这可以解释为什么在这两种情况下你都不能得到一个常规的deepcopy。

相关问题