大熊猫中的切片和副本有啥区别? [复制]

Posted

技术标签:

【中文标题】大熊猫中的切片和副本有啥区别? [复制]【英文标题】:What is the difference between a slice and a copy in pandas? [duplicate]大熊猫中的切片和副本有什么区别? [复制] 【发布时间】:2015-05-12 14:03:17 【问题描述】:

任何人都可以解释在熊猫中拥有“切片”与“副本”的含义吗?我一直在使用 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()。我认为这与熊猫文档中的“默认情况下,组键在 groupby 操作期间排序”有关......但我对到底发生了什么感到困惑。

谢谢!

【问题讨论】:

【参考方案1】:

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

请参阅此post 了解更多信息。

【讨论】:

【参考方案2】:

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

    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()

希望这会有所帮助。

【讨论】:

以上是关于大熊猫中的切片和副本有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

将值从一个数据帧切片复制到另一个:使用“IndexSlice”的多索引熊猫数据帧的切片是不是总是一致地排序?

熊猫数据框列计算

Python:SettingWithCopyWarning:试图在 DataFrame 中的切片副本上设置值

带有复制警告的熊猫设置

在熊猫数据框中创建重复列

熊猫视图与副本:文档说“没人知道”?