You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

对df.copy()使用applymap却修改原始DataFrame的原因是什么?

问题原因说明
  • 核心原因是pandas.DataFrame.copy()默认执行浅拷贝:浅拷贝仅复制DataFrame的轴标签、数据结构,以及对单元格存储对象的引用,不会递归复制嵌套的可变对象(你案例中的列表就是典型的可变对象)。也就是说,浅拷贝得到的dfcopy和原results中,对应单元格存储的列表指向内存中的同一个对象。
  • 你使用的list.sort()是列表的原地排序方法,会直接修改调用它的列表对象本身,而不是返回新的排序后列表。所以虽然你是在dfcopy上执行操作,但本质修改的是两个DataFrame共用的列表对象,自然会同步修改到原DataFrame的数据。
解决方法

两种方案可选:

  1. 拷贝时改用深拷贝,直接递归复制所有嵌套的可变对象,让副本和原数据完全独立:
dfcopy = results[['years', 'line_items']].copy(deep=True)
# 后续排序逻辑不变
dfcopy.applymap(lambda x: x.sort())
  1. 排序时避免使用原地方法,改用sorted()函数,它会返回新的排序后列表,不会修改原引用对象,不需要修改拷贝逻辑:
# 不需要修改拷贝代码,仅修改排序逻辑即可
dfcopy = dfcopy.applymap(lambda x: sorted(x))

内容的提问来源于stack exchange,提问作者geds133

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:48:03