问题描述
我有一个想要处理的 Pandas 数据框,最好是一个类。数据框很大。
# some data
symbol_1 = 10000
symbol_2 = 10001
df = pd.DataFrame("some large dataframe")
# create a class to process the data
class Calc_stats:
"statistics on the symbol """
def __init__(self,symbol,df):
''' initialise the class '''
self.symbol = symbol
self.df = df
# instantate class
stats_1 = Calc_stats(symbol_1,df)
stats_2 = Calc_stats(symbol_2,df)
所以我的问题是:我是否会为创建的类的每个实例复制内存中的(大)df?
即。代码是否留下了 3 个数据帧,df
、stats_1.df
和 stats_2.df
,还是只使用了一个 df,而其他两个实例指向第一个实例?
解决方法
您可以使用 id()
函数测试这些数据帧是否是内存中的同一个对象,或者通过创建两个对象、修改原始数据帧,然后检查这些对象的属性是否有这些变化。
如果您担心复制大数据结构或对象,您可以随时从类中删除该属性,而是创建处理从这些数据帧中提取相关数据的函数。
,正在测试中。我创建了一个示例数据帧,然后编辑了其中一个实例数据帧的元素,然后 print(df)
原始数据帧并验证它是否已更改。
这意味着只有一个数据帧(而不是 3 个相同的副本)。
@Yaels 的回答还指出可以使用 ID()
函数。