moshevi
moshevi

Reputation: 5993

make a truly deep copy of a pandas Series

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

Answers (2)

Learning is a mess
Learning is a mess

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

shx2
shx2

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

Related Questions