pandas性能提升之避免SettingWithCopy

       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)