用python创建一个函数,计算pandas数据框中的平均值或中值



我有一个数据框架

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

Use function:

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')

首先将'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'])

同时处理所有列的通用解决方案

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,))

最新更新