【问题标题】:Pass pandas dataframe into class将熊猫数据框传递给类
【发布时间】:2015-01-13 00:15:58
【问题描述】:

我想从从 csv 创建的 pandas 数据框创建一个类。使用@staticmethod 是最好的方法吗?这样我就不必为每个对象分别读取数据帧

【问题讨论】:

    标签: python class pandas


    【解决方案1】:

    您不需要@staticmethod。每当您创建类的实例时,您都可以传递 pandas DataFrame:

    class MyClass:
    
        def __init__(self, my_dataframe):
            self.my_dataframe = my_dataframe
    
    a = MyClass(my_dataframe)
    b = MyClass(my_dataframe)
    

    此时,ab 都可以访问您传递的 DataFrame,您不必每次都读取 DataFrame。您可以从 CSV 文件中读取一次数据,创建 DataFrame 并根据需要构建任意数量的类实例(它们都可以访问 DataFrame)。

    【讨论】:

    • 谢谢!所以如果我通过对象a向数据框添加一列,并通过对象b添加具有相同名称但不同值的列;它会修改原始数据框吗?
    • @user308827:嗯,是的,因为此时您的程序中只有一个 DataFrame 对象。尽管您必须知道这两个类都修改了相同的 DataFrame,因此您不能假设 DataFrame 将保持不变。根据您的代码的作用,每个实例都需要自始至终使用相同的 DataFrame。
    • 感谢您的明确解释。我想要每个对象的数据框的子集。有什么方法可以确保我创建的所有对象都有单独的子集并且只修改这些子集?
    • 您可以读取 DataFrame,然后从该大 DataFrame 创建一些较小的 DataFrame。如果您随后将较小的 DataFrames 传递给类,则没有修改错误列/数据的风险。因此,您必须从 DataFrame 中选择所需的列并相应地创建一个新的 DataFrame。
    【解决方案2】:

    我认为您可以在第一个实例中创建数据框

    a = MyClass(my_dataframe)

    然后复制一份

    b = a.copy()

    那么b独立于a

    【讨论】:

    • 要使 b 独立于 a,您需要将 (deep = True) 作为参数添加到 a.copy()。
    猜你喜欢
    • 2022-01-23
    • 2021-07-14
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    相关资源
    最近更新 更多