过滤数据帧会增加 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
假设我有 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