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 ?
To create deep copy of Pandas DataFrame, use df. copy() or df. copy(deep=True) method.
Pandas DataFrame copy() Method The copy() method returns a copy of the DataFrame. By default, the copy is a "deep copy" meaning that any changes made in the original DataFrame will NOT be reflected in the copy.
Example: Set deep=False in the Series. copy() Method set to True. Here, in this example, we set the parameter deep=True in the Series. copy() Method. Now, this method copies the Series object with indices and data, but if we make any changes to the Series, it will reflect the original Series also.
To make a deep copy, use the deepcopy() function of the copy module. In a deep copy, copies are inserted instead of references to objects, so changing one does not change the other.
The standard hacky way of deep-copying python objects should work. That is, using pickle
.
import pickle
sr2 = pickle.loads(pickle.dumps(sr))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With