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

如何复制DataFrame中含集合的列且修改新列不影响原列?

解决DataFrame中集合列复制后原列被修改的问题

你遇到的问题核心在于可变对象的浅拷贝特性:集合(set)是Python中的可变对象,xy[2].copy()对Series做的是浅拷贝——它只是复制了每个元素(也就是集合对象)的引用,而不是为每个集合创建一个全新的副本。这就导致新列3和原列2里的集合指向的是同一个内存对象,修改其中一个,另一个自然也会跟着变。

两种可行的解决方案

1. 用apply(set)生成新集合

可以通过apply方法,对原列的每个集合调用set()构造函数,生成一个独立的新集合:

import pandas as pd

xy = pd.DataFrame(columns=[2])
xy.at[1, 2] = {1,2,3,4}
# 用apply创建每个集合的副本
xy[3] = xy[2].apply(set)
xy.at[1,3].add(5)

print(xy)

输出结果会符合你的预期:

2                3
1  {1,2,3,4}  {1,2,3,4,5}

2. 使用深拷贝(copy.deepcopy)

如果你的集合里还嵌套了其他可变对象,深拷贝会更稳妥。先导入copy模块,然后对每个集合做深拷贝:

import pandas as pd
import copy

xy = pd.DataFrame(columns=[2])
xy.at[1, 2] = {1,2,3,4}
# 对每个集合执行深拷贝
xy[3] = xy[2].apply(copy.deepcopy)
xy.at[1,3].add(5)

print(xy)

这个方法同样能得到你想要的结果,而且适用于更复杂的嵌套可变对象场景。

验证独立性

你可以通过打印两个集合的内存地址来确认它们已经是独立对象了:

print(id(xy.at[1,2]))
print(id(xy.at[1,3]))

输出的两个ID会完全不同,说明它们指向的是内存中两个不同的集合,修改其中一个不会影响另一个。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:47:40