如何将类函数应用于替换 pandas 数据框子集列中的 NaN 为均值?

该类由一组属性和函数组成,包括:

属性:

  • df:一个 pandas 数据框。
  • numerical_feature_names:具有数值的 df 列。
  • label_column_names:要分组的 df 字符串列。

函数:

  • mean(nums):接受一个数字列表作为输入并返回均值
  • fill_na(df, numerical_feature_names, label_columns):接受类属性作为输入并返回一个转换后的 df。

这是类定义:

class PLUMBER():        def __init__(self):                ################# attributes ################                self.df=df        # 指定标签和数值特征名称:                self.numerical_feature_names=numerical_feature_names        self.label_column_names=label_column_names               #####################  mean  ##############################        def mean(self, nums):                total=0.0                for num in nums:            total=total+num                    return total/len(nums)       ############ fill the numerical features ##################       def fill_na(self, df, numerical_feature_names, label_column_names):                # 声明参数:        df=self.df        numerical_feature_names=self.numerical_feature_names        label_column_names=self.label_column_names                # 现在用分组均值替换 NaN                for numerical_feature_name in numerical_feature_names:                        df[numerical_feature_name]=df.groupby([label_column_names]).transform(lambda x: x.fillna(self.mean(x)))                            return df

在尝试将其应用于 pandas 数据框时:

if __name__=="__main__":        # 初始化类    plumber=PLUMBER()        # 用分组均值替换 NaN    df=plumber.fill_na(df=df, numerical_feature_names=numerical_feature_names, label_column_names=label_column_names)  

会出现以下错误:

ValueError: Grouper and axis must be same length

数据和类参数

如何修改类以获得转换后的 df(即用其分组均值替换 np.nan 的那个)?


回答:

首先,错误的原因是 label_column_names 已经是一个 list,所以在 groupby 中不需要用 [] 包围它。因此,应该使用 df.groupby(label_column_names)... 而不是 df.groupby([label_column_names])...

现在,为了真正解决您的问题,在类的 fill_na 函数中,用以下代码替换 for 循环(实际上您不需要这个循环):

df[numerical_feature_names] = (    df[numerical_feature_names]      .fillna(          df.groupby(label_column_names)            [numerical_feature_names].transform('mean')      ))

在这段代码中,您用 groupby.transform 的结果来填充 numerical_feature_names 列的 fillna,这些结果是这些列的均值。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注