使用常规的Python列表,我可以执行以下操作:
x = [1, 2, 3]
y = x
x[:] = [4, 5, 6]
print(y) # prints '[4, 5, 6]'
也就是说,我可以用完全不同的值就地替换list
对象(x
)的内容,而不会丢失以前创建的对它的引用(y
)。
我想对熊猫DataFrame
做同样的事情。以下操作有效,但前提是替换的形状和列必须与原始的相同:
x = pd.DataFrame({'a': [1,2], 'b': [3,4]})
y = x
x[:] = pd.DataFrame({'a': [5, 6], 'b': [7, 8]})
print(x)
print(y)
如果替换具有不同的列名,那么它们将被静默映射到原始列名:
x[:] = pd.DataFrame({'c': [9, 10], 'd': [11, 12]})
print(x)
如果替换的形状不同,则会引发ValueError
:
x[:] = pd.DataFrame({
'a': [13, 14, 15],
'b': [16, 17, 18],
'e': [18, 19, 20],
})