【问题标题】:How can I assign a pandas dataframe to a class variable?如何将熊猫数据框分配给类变量?
【发布时间】:2023-03-31 06:06:01
【问题描述】:

我的班级中有不同的方法使用相同的 pandas 数据框。不是将相同的数据框作为参数传递给每个方法,有没有一种方法可以将数据框声明为类变量,以便所有方法都可以共享它。

我尝试了此处给出的解决方案,但无法正常工作。 Assign a pandas dataframe to an object as a static class variable - memory use (Python)

我正在尝试做的一个例子是

import pandas as pd
df_temp = pd.DataFrame()
df_temp = some_df.copy()     #Assume that I am copying some_df to df_temp

class Weather:
  # I tried using the below and not pass the dataframe to my methods but it didnt work.
  # df = df_temp
  def __init__(self, baseyear):
    self.baseyear = baseyear
   
  def HU_monthly(self, df, month):
    df_HU = df.groupby(['Station','Year','Month'])['Heat Units'].sum().round(2).reset_index()
    return(df_HU)
  
  def HU_range(self, df, first_month, last_month):
    df_between_months = df[(first_month <=df['Month'])&(df['Month']<=last_month)]
    return(df_between_months)

monthly = Weather(2000)
df_1 = monthly.HU_monthly(df_temp, 8)

ranger = Weather(2010)
df_2 = ranger.HU_range(df_temp, 5, 10)

我作为参数传递的数据帧(df_temp)对于这两种情况都是相同的,消除传递它的需要的最佳方法是什么?

【问题讨论】:

  • 除非您希望类的所有实例共享相同的数据帧,否则将其设为实例变量。所有方法都可以访问它。
  • 您可以将DataFrame作为参数添加到__init__
  • 你想与类的所有实例共享单个数据框(在大多数情况下这似乎是个坏主意)。如果不是,那不就是__init__ 的另一个参数,比如baseyear吗?
  • 数据框本身会改变吗?您是否希望在另一个实例中看到对数据框的更改?
  • @tdelaney,我明白你关于如何为不同的实例使用相同的数据帧是一个坏主意并且可能导致更大的问题的观点。但出于好奇,假设有一个我不想为不同的实例更改的数据框(可能是项目的价格表或类似的东西,对于任何方法都不会改变)。我可以将其设为类变量而不是实例变量吗?如果是,我该怎么做?

标签: python pandas dataframe class


【解决方案1】:

您可以在构造对象时传递数据框并将其分配给这样的实例变量:

class Weather:
    def __init__(self, df):
        self.df = df

然后您可以像这样在所有方法中访问数据框:

def HU_monthly(self, month):
    df_HU = self.df.groupby(['Station','Year','Month'])['Heat Units'].sum().round(2).reset_index()
    return(df_HU)

如下创建你的类对象:

weather = Weather(df)

【讨论】:

    猜你喜欢
    • 2021-02-09
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2019-04-06
    相关资源
    最近更新 更多