对 pandas 系列进行真正的深度复制

make a truly deep copy of a pandas Series

我有一个 pd.Series,每个单元格都是一个列表。 我想对它进行深拷贝,但是 pd.Series.copy 似乎只创建了值的浅拷贝(即使 deep 参数默认为 True)。

例子

import pandas as pd

sr = pd.Series([list(range(3)), list(range(3))])
sr_c = sr.copy()
sr[0].append(4)

复制的 pd.Series sr_c 正在转换为

0   [0, 1, 2, 4]
1   [0, 1, 2]

我这样做了并且成功了:

from copy import deepcopy
sr_c = sr_c.apply(deepcopy)

不过这看起来有点不对劲,有没有更好的方法呢?

深度复制 python 对象的标准 hacky 方法应该可行。也就是说,使用 pickle.

import pickle
sr2 = pickle.loads(pickle.dumps(sr))

我用过

from copy import deepcopy
sr_copy = pd.Series( deepcopy(sr.to_dict()))

只是为了确保索引也被递归复制(如果需要)。