Reputation: 5993
I have a pd.Series
with each cell being a list.
I want to make a deep copy of it, however it seems like pd.Series.copy
only creates a shallow copy of the values (even though the deep
arg is True
be default).
example
import pandas as pd
sr = pd.Series([list(range(3)), list(range(3))])
sr_c = sr.copy()
sr[0].append(4)
the copied pd.Series
sr_c
is being transformed to
0 [0, 1, 2, 4]
1 [0, 1, 2]
I did this and it worked:
from copy import deepcopy
sr_c = sr_c.apply(deepcopy)
however this seems like a hack, is there a better way to do it ?
Upvotes: 8
Views: 3377
Reputation: 8277
I have used
from copy import deepcopy
sr_copy = pd.Series( deepcopy(sr.to_dict()))
just to be sure that the index is copied recursively too (if needed).
Upvotes: 4
Reputation: 64328
The standard hacky way of deep-copying python objects should work. That is, using pickle
.
import pickle
sr2 = pickle.loads(pickle.dumps(sr))
Upvotes: 7