pandas中,当你用了如下赋值方式时,往往会抛出一个warning,SettingWithCopy warning。这个warning的原因在于,如果你用了如下赋值,则脚本可能会在内存里先创建一个df['a']的copy,然后再进行索引后的赋值,赋值后再将新的值赋给原df对象,这样就涉及到了两次链式赋值。至于为什么是可能会,而不是一定会,是因为这个copy的创建会由这个对象在内存位置附近的内存所决定,取决于电脑内存的分配。这个过程的弊端在于,先创建了一个copy,如果这个copy很大的话,那么就会很占用内存,虽然赋值之后就会被回收,但是由于很大,两次的链式赋值也会降低性能,减慢速度,所以我们应该避免使用这种链式赋值。
df['a'][df['a']>5]=range(5)
那么如何避免呢?可以换成如下的赋值方式,即用loc或iloc一次索引一次赋值,直接到位,无需链式赋值。
df.loc[df['b']>5,'a']=5

在pandas中,特定赋值方式会抛出SettingWithCopy warning,原因是可能在内存创建副本并进行两次链式赋值,这取决于内存分配。创建大副本会占用内存、降低性能,可使用loc或iloc一次索引一次赋值来避免链式赋值。
1238

被折叠的 条评论
为什么被折叠?



