将数据帧解析为类而不复制内存中的数据帧

问题描述

我有一个想要处理的 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 个数据帧,dfstats_1.dfstats_2.df,还是只使用了一个 df,而其他两个实例指向第一个实例?

解决方法

您可以使用 id() 函数测试这些数据帧是否是内存中的同一个对象,或者通过创建两个对象、修改原始数据帧,然后检查这些对象的属性是否有这些变化。

如果您担心复制大数据结构或对象,您可以随时从类中删除该属性,而是创建处理从这些数据帧中提取相关数据的函数。

,

正在测试中。我创建了一个示例数据帧,然后编辑了其中一个实例数据帧的元素,然后 print(df) 原始数据帧并验证它是否已更改。

这意味着只有一个数据帧(而不是 3 个相同的副本)。

@Yaels 的回答还指出可以使用 ID() 函数。