我尝试复制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
1条答案
按热度按时间t40tm48m1#
你可以通过先创建一个dict,然后在dict上调用deepcopy来实现deepcopy(不知道在df上的y deepcopy不能正常工作):
编辑:
如果您阅读了panda复制方法的参考:它说对于python对象不执行深度复制,现在调用python deepcopy委托给NDFrame类的一个deepcopy属性,这可以解释为什么在这两种情况下你都不能得到一个常规的deepcopy。