gpt4 book ai didi

python - Pandas DataFrame 切片与副本 : which one is more memory friendly?

转载 作者:行者123 更新时间:2023-12-03 13:41:16 24 4
gpt4 key购买 nike

我发誓我前段时间在某处看到过这个讨论,但我再也找不到这个了。
想象一下我有这个方法:

def my_method():
df = pd.DataFrame({'val': np.random.randint(0, 1000, 1000000)})
return df[df['val'] == 1]
自从我决定不这样做以来已经有一段时间了,因为该方法可能会返回一个 View (这不是确定的,取决于 pandas 想要做什么)而不是一个新的数据帧。
我读到的问题是,如果返回一个 View ,原始数据帧中的引用计数不会减少,因为即使我们只使用了一小部分数据,它仍在引用旧数据帧。
我被建议改为执行以下操作:
def my_method():
df = pd.DataFrame({'val': np.random.randint(0, 1000, 1000000)})
return df.drop(df[df["val"] != 1].index)
在这种情况下,drop 方法只使用我们想要保留的数据创建一个新的数据帧,一旦该方法完成,原始数据帧中的引用计数将被设置为零,使其容易受到垃圾收集并最终释放内存。
总之,这将更加内存友好,并且还将确保该方法的结果是数据帧而不是数据帧的 View ,这会导致 settingOnCopyWarning我们都爱。
这仍然是真的吗?或者是我在某处误读了什么?我试图检查这是否对内存使用有一些好处,但考虑到我无法控制 gc 决定何时从内存中“删除”东西,只是要求它收集东西......我似乎从来没有任何结论性的结果。

最佳答案

如果你想避免 returning a view , 只需将 return 语句从 df[mask] 更改为至 df[mask].copy() .

关于python - Pandas DataFrame 切片与副本 : which one is more memory friendly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64583097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com