复制熊猫数据帧和系列

时间:2018-03-06 15:20:34

标签: python pandas reference copy series

如果我将名称引用到列表中,我知道最后一行代码会更改a和b中的两个值:

a = [1,2,3]
b = a
b[1] = 4

因此(其中一种)正确的方法是使用:b = a[:]。这样,更改b的值不会影响a的值。

然而,对于pandas系列或数据帧来说,情况似乎并非如此:

a = pd.DataFrame({1: [2,3,4], 2: [3,4,5]})
b = a[:]
b.loc[2,2] = 10

最后一行代码将改变b和a。 有人可以向我解释为什么这里有区别?另外,在不影响原始系列/数据帧的情况下,创建新系列/数据帧的正确方法是什么?我应该总是使用b = a.copy(deep=True)吗?

1 个答案:

答案 0 :(得分:5)

a[:]创建一个浅表副本。对于浅层副本,底层数据和索引是从原始数据中借用的 - 出于性能原因,底层的numpy数组数据是相同的。这就是使用deep=True时默认启用a.copy()开关的原因 - 您不必担心修改原始文件,因为底层数据也会被复制。使用a[:],假设您知道自己在做什么。