我研究了浅拷贝和深拷贝。我发现 copy.deepcopy()
在大多数情况下都可以正常工作。不知何故,它不适用于具有嵌套数据结构的pandas数据框。
请查看以下示例和结果,您将立即知道我在说什么:
import pandas as pd
import copy`
a = pd.Series([[1,2], 3], index=["a", "b"])
b = a.copy(deep=True)
print('-->CASE 1')
print('before: \n', a)
d[0][0]=3
print('after: \n', a, '\n\n')
c = pd.Series([[1,2], 3], index=["a", "b"])
d = c.copy(deep=True)
print('-->CASE 2')
print('before: \n', c)
d[0]=3
print('after: \n', c, '\n\n')
e = pd.Series([[1,2], 3], index=["a", "b"])
print('-->CASE 3')
f = copy.deepcopy(e)
print('before: \n', e)
f[0][0]=3
print('after: \n', e, '\n\n')
g = pd.Series([[1,2], 3], index=["a", "b"])
print('-->CASE 4')
h = copy.deepcopy(g)
print('before: \n', g)
h[0]=3
print('after: \n', g, '\n\n')
结果类似于:
-->CASE 1
before:
a [1, 2]
b 3
dtype: object
after:
a [3, 2]
b 3
dtype: object
-->CASE 2
before:
a [1, 2]
b 3
dtype: object
after:
a [1, 2]
b 3
dtype: object
-->CASE 3
before:
a [1, 2]
b 3
dtype: object
after:
a [3, 2]
b 3
dtype: object
-->CASE 4
before:
a [1, 2]
b 3
dtype: object
after:
a [1, 2]
b 3
很明显,当数据帧包含嵌套数据结构时,copy.deepcopy()
和df.copy(deep=True)
都无法真正执行深度复制。
如何像示例案例一样,使用嵌套数据对数据框进行真正的“深度复制” ?