Python 在原地与不原地操作数据帧(原地=真与假)

Python 在原地与不原地操作数据帧(原地=真与假),python,pandas,memory,Python,Pandas,Memory,我想知道当我们选择就地操作数据帧(与不就地操作相比)时,内存使用是否会显著减少 我对堆栈溢出进行了一些搜索,结果发现,如果操作没有执行到位,则返回一个数据帧副本(我想当有一个名为'inplace':p的可选参数时,这有点明显) 如果我不需要保留原始的数据帧,只修改数据帧是有益的(也是合乎逻辑的),对吗 上下文: 我试图在按数据框中的特定“列”排序时获取顶部元素。我想知道这两种方法中哪一种更有效: 到位: vs 副本: 对于“复制”的情况,它仍然在排序时为复制分配内存,即使我没有将副本分配给变量,

我想知道当我们选择就地操作数据帧(与不就地操作相比)时,内存使用是否会显著减少

我对堆栈溢出进行了一些搜索,结果发现,如果操作没有执行到位,则返回一个数据帧副本(我想当有一个名为'inplace':p的可选参数时,这有点明显)

如果我不需要保留原始的数据帧,只修改数据帧是有益的(也是合乎逻辑的),对吗

上下文:

我试图在按数据框中的特定“列”排序时获取顶部元素。我想知道这两种方法中哪一种更有效:

到位:

vs

副本:

对于“复制”的情况,它仍然在排序时为复制分配内存,即使我没有将副本分配给变量,对吗?如果是,从内存中释放该副本需要多长时间


感谢您提前提供的任何见解

一般来说,
inplace=True
和返回显式副本之间没有区别-在这两种情况下,都会创建副本。碰巧的是,在第一种情况下,副本中的数据被复制回原始
df
对象,因此不需要重新分配


此外,请注意,从
v0.21
开始,
df.sort
已被弃用,请改用。

在jupyter中执行,并通过%%time比较执行时间。或者选择其他工具来衡量性能我更关心内存使用情况,所以我将试用“python内存分析器”。我忘记了那个模块。。。我只是想知道是否有人能给我一个快速的概念性答案。如果你的问题得到了回答,请。它没有得到完全的回答…哦,所以这两种方法都在内存中复制了一个副本,但在原地标记为True,只是将它写回原始df?那么,将inplace设置为False,然后删除原始变量的引用以显式释放内存,这与将inplace设置为True基本上是一样的,这是否准确呢?@Ellest对第一个问题的回答是肯定的。我不明白你的第二个问题,因为这里没有分配/取消分配。@COLDSPEED没有为副本分配内存,如何创建副本?在
inplace=False
的情况下,原始副本不会从内存中释放,因为变量仍将引用该数据帧对象吗?i、 e.如果我们没有进行适当的排序:
df=DataFrame(…);df_sorted=df.sort(…,inplace=False)
剩下的df和df_sorted都占用了空间。然而,如果我们进行适当的排序:
df=DataFrame(…);sort(…,inplace=True)
我们只剩下一个数据帧。@在后一种情况下,额外的df被垃圾收集。
df.sort('some_column', ascending=0, inplace=1)
top = df.iloc[0]
top = df.sort('some_column', ascending=0).iloc[0]