这一点之前已经讨论过,但答案有矛盾:
我想知道的是:
inplace = False
是默认行为?inplace = True
而失败/行为不当?inplace = True
操作是否“真的”执行到位?inplace
参数,总是默认为False
,这意味着原始数据帧未被触及,并且操作返回一个新的DF。inplace = True
时,操作可能对原始DF起作用,但仍可能在后台处理副本,完成后只需重新分配引用。inplace = False
:df.dropna().rename().sum()...
,这很好,并且提供了一个延迟计算或更有效的重新排序的机会(尽管我不认为Pandas正在这样做)。inplace = True
时,Pandas必须进行SettingWithCopy
检查,这是很昂贵的。inplace = False
避免了这一点。inplace = True
:reset_index()
运行速度是峰值内存的两倍,并且使用了一半的峰值内存!)。因此,撇开copy vs view问题不谈,除非特别编写了一个链式语句,否则始终使用inplace = True
似乎更有效率。但这不是熊猫默认的选择,所以我错过了什么?
如果
inplace
是默认值,那么数据帧将针对当前引用它的所有名称进行变异。举个简单的例子,比如我有一个
df
:现在,DataFrame保留行顺序非常重要——比如说,它来自插入顺序是关键的数据源。
但是,我现在需要执行一些需要不同排序顺序的操作:
没关系-我原来的
df
保持不变。但是,如果inplace=True
是默认值,那么我原来的df
将被排序为f()
的副作用,在这个副作用中,我必须信任调用方记住不要在适当的地方做我不期望的事情,而不是故意在适当的地方做某事。。。因此,最好是任何能使一个物体发生突变的东西都能显式地使其发生突变,至少能使其更明显地说明发生了什么以及为什么。即使使用基本的Python内置可变表,您也可以看到:
相关问题 更多 >
编程相关推荐