在 python 中创建一个函数,它将估算 pandas 数据框中的平均值或中值
Create a function in python, which will impute mean OR median values in the pandas dataframe
我有一个数据框
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
使用函数:
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,))
我有一个数据框
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
使用函数:
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,))