对 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()))
只是为了确保索引也被递归复制(如果需要)。
我有一个 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()))
只是为了确保索引也被递归复制(如果需要)。