pandas中的切片和副本有什么区别?

时间:2015-03-10 22:45:48

标签: pandas

任何人都可以解释在熊猫中拥有“切片”与“副本”意味着什么吗?我已经和熊猫一起工作了一段时间,并且已经内化了一些关于如何避免警告的经验法则。

但是一位同事今天有一些奇怪的行为我觉得可以追溯到同样的区别,这让我意识到我并不真正理解幕后发生的事情以及它在不同情况下的表现。我喜欢解释!

-

今天的例子:

def func(df):
    df.sort('sort_col',inplace=True)
    some other stuff
    return modified_df

grouped = df.groupby('col1')
result = grouped.apply(func)

func每次都返回相同的modified_df,直到我们将sort更改为df2 = df.sort('sort_col').copy()。我认为这与pandas docs中的“默认情况下组密钥在groupby操作期间排序”有关...但我对确切发生的事情感到困惑。

谢谢!

2 个答案:

答案 0 :(得分:4)

切片是原始数据上的视图。对视图的任何修改都将反映在源数组中。例如,如果这是您的数组:

    my_array=array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

如果您采用切片并指定标量值,它将更改原始数组。

    my_array[4:6]=12
    print my_array
    [ 0  1  2  3 12 12  6  7  8  9 10]

但是,您可以复制切片而不是视图,以防止修改原始数组。

    my_array[4:6].copy()

希望这有帮助。

答案 1 :(得分:1)

切片意味着您正在操作(或可以操作)底层对象本身,因此对其所做的任何更改都将反映在该对象中。副本就是一个副本。副本上的任何更改都不会反映在基础对象中。

有关详细信息,请参阅此post