过滤数据帧会增加 ram 的使用吗?

does filtering a dataframe result in an increase use of ram?

假设我有 16 GB 的内存。 我有一个内存中的 DataFrame (df),大约有 8 个演出。 假设我想将此 df 保留在内存中,但我必须对其进行过滤以用于其他目的。

所以我做了类似的事情

filtered = df.iloc[x, y]

然后说 filtered 就像 2 场演出。

这是否意味着我的内存使用量现在是 10 gig,还是仍然是 8 gig?

我正在尝试弄清楚如何构建某些东西,同时保持 ram 的高效使用。

也许如果我使用它而不是创建一个新变量它保持在 8,否则它会增加?

trainOn(df.iloc[x, y])

你怎么看?

这取决于你如何进行过滤。 pandas documentation 表示:

Whether a copy or a reference is returned for a setting operation, may depend on the context.

这里有一个小例子来演示这两种可能的行为。首先,当您将 df.iloc 与切片一起使用时,它 returns 是原始数据帧的视图,因此内存负载几乎不会受到影响:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.array(range(9)).reshape((3, 3)))

filtered = df.iloc[:2, :2]
df.iloc[0, 0] = 777

print(filtered)
     0  1
0  777  1
1    3  4

其次,改用布尔过滤器,显然返回了一个副本,因此这会影响内存负载:

df = pd.DataFrame(np.array(range(9)).reshape((3, 3)))

x = y = [True, False, True]
filtered = df.iloc[x, y]
df.iloc[0, 0] = 777

print(filtered)
   0  2
0  0  2
2  6  8