在 python 中创建一个函数,它将在 pandas 数据框中估算均值或中值

Posted

技术标签:

【中文标题】在 python 中创建一个函数,它将在 pandas 数据框中估算均值或中值【英文标题】:Create a function in python, which will impute mean OR median values in the pandas dataframe 【发布时间】:2021-11-17 14:20:11 【问题描述】:

我有一个数据框

data = 'Age':[18, np.nan, 17, 14, 15, np.nan, 17, 17] 
df = pd.DataFrame(data) 
df

我想写一个解决方案,它允许估算平均值或中位数, 使用

df = df.fillna 
df = df.fillna(df.median())

均值的期望输出

data = 'Age':[18, 16.3, 17, 14, 15, 16.3, 17, 17] 
df = pd.DataFrame(data) 
df

中位数的期望输出

data = 'Age':[18, 17, 17, 14, 15, 17, 17, 17] 
df = pd.DataFrame(data) 
df

【问题讨论】:

【参考方案1】:

使用功能:

def f(df, func):
    if func in ['mean','median']:
        return df.fillna(df.agg(func))
    else:
        raise Exception("Wrong function, use only 'mean' or 'median'")
    

如果需要mean,请使用:

df = f(df, 'mean')

如果需要median,请使用:

df = f(df, 'median')

【讨论】:

谢谢,但它是如何实现的? :) @AnakinSkywalker - 是的,df.replace('nan', np.nan) 我的观点 - 我想选择估算均值或中位数,将函数应用于列。 @AnakinSkywalker - 不确定是否理解,可能有问题的代码 df = df.fillna 需要删除? 好的,知道了!感谢您的时间和努力!【参考方案2】:

首先将'nan' 解析为float

df = df.astype(float)
df = df.fillna(df.mean())
print (df)

输出:

         Age
0  18.000000
1  16.333333
2  17.000000
3  14.000000
4  15.000000
5  16.333333
6  17.000000
7  17.000000

对于功能:

def f(df, func):
    return df.fillna([df.mean(), df.median()][func == 'mean'])

【讨论】:

谢谢,但是如何将它放入我将用均值或中位数估算的函数中? @AnakinSkywalker 编辑我的 已投票,但按时间顺序接受了第一个答案 :) @AnakinSkywalker 啊,太好了!【参考方案3】:

一次适用于所有列的通用解决方案

data = 'Age':[18, 'nan', 17, 14, 15, 'nan', 17, 17] 
df = pd.DataFrame(data) 

df = df.astype('float')

def foo(s, func):
    val = func(s)
    return s.fillna(val)

df.apply(foo, args=(np.mean,))

df.apply(foo, args=(np.median,))

df.apply(foo, args(custom_function,))

【讨论】:

以上是关于在 python 中创建一个函数,它将在 pandas 数据框中估算均值或中值的主要内容,如果未能解决你的问题,请参考以下文章

在python中创建另存为函数

是否可以将在用户定义的函数中创建的数据表放在全局环境中?

创建批处理文件以在多个文件夹中创建多个文件夹

如何在 html 中创建带有 4 个选项卡的菜单,该菜单将在一页上显示内容?

通过 C# Azure 函数生成 Blob 容器

在python中自动测试aws lambda函数