任何人都可以解释在熊猫中拥有“切片”与“副本”意味着什么吗?我已经和熊猫一起工作了一段时间,并且已经内化了一些关于如何避免警告的经验法则。
但是一位同事今天有一些奇怪的行为我觉得可以追溯到同样的区别,这让我意识到我并不真正理解幕后发生的事情以及它在不同情况下的表现。我喜欢解释!
-
今天的例子:
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操作期间排序”有关...但我对确切发生的事情感到困惑。
谢谢!
答案 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。