制作熊猫系列的真正深层副本

mos*_*evi 6 python deep-copy pandas

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

例子

import pandas as pd

sr = pd.Series([list(range(3)), list(range(3))])
sr_c = sr.copy()
sr[0].append(4)
Run Code Online (Sandbox Code Playgroud)

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

0   [0, 1, 2, 4]
1   [0, 1, 2]
Run Code Online (Sandbox Code Playgroud)

我这样做了,它奏效了:

from copy import deepcopy
sr_c = sr_c.apply(deepcopy)
Run Code Online (Sandbox Code Playgroud)

但这似乎是一个黑客,有没有更好的方法来做到这一点?

shx*_*hx2 5

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

import pickle
sr2 = pickle.loads(pickle.dumps(sr))
Run Code Online (Sandbox Code Playgroud)

  • @Learningisamess,正确。这就是为什么这是一个黑客,但却是一个“相当有用的黑客”。Pickling+unpickling 和深度复制操作相似且相关,但并不等同。尽管很少见,但有些类型是可深度复制但不可腌制的。更多相关信息[此处](/sf/ask/1567219811/) (2认同)