Python 复制包含集合的DataFrame列

Python 复制包含集合的DataFrame列,python,pandas,Python,Pandas,我想将一列从数据帧复制到一个新列中。问题是它包含集合 xy=pd.DataFrame(columns=[2]) xy.at[1,2]={1,2,3,4} xy[3]=xy[2].copy() xy.at[1,3].add(5) 我想得到这个: 2 3 1 {1, 2, 3, 4} {1, 2, 3, 4, 5} 但是xy返回了这个: 2 3 1 {1, 2, 3, 4

我想将一列从数据帧复制到一个新列中。问题是它包含集合

xy=pd.DataFrame(columns=[2])
xy.at[1,2]={1,2,3,4}
xy[3]=xy[2].copy()
xy.at[1,3].add(5)
我想得到这个:

           2                 3
1   {1, 2, 3, 4}      {1, 2, 3, 4, 5}
但是xy返回了这个:

           2                 3
1   {1, 2, 3, 4, 5}   {1, 2, 3, 4, 5}
如何保持第2列中的集合不变?
谢谢

您可以通过将最后一行更改为

xy.at[1,3] = set(xy.at[1,3]).union(set([5]))

|
运算符连接两个集合:

xy=pd.DataFrame(columns=[2])
xy.at[1,2]={1,2,3,4}
xy[3]=xy[2].copy()
xy.at[1,3]=xy.at[1,3]|{5}

print(xy)
              2                3
1  {1, 2, 3, 4}  {1, 2, 3, 4, 5}

这里的问题是集合是一个可变对象。使用
xy[2].copy
时,只能对序列进行浅拷贝,因此该拷贝仍将引用同一组

您只剩下两个选项:

  • 强制深度复制(不是很简单:
    copy.deepcopy
    不够)

  • 永远不要更改集合,而是指定一个新集合:

    xy.at[1,3] = xy.at[1,3] | {5}
    
    注意:
    xy.at[1,3]|={5}
    实际上会改变集合


@Radeau:它是相同的:
-
可以使用:
xy.at[1,3]=xy.at[1,3]-{4}
xy.at[1,3] = xy.at[1,3] | {5}