#python #pandas #function #mean #median
Вопрос:
У меня есть фрейм данных
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')
Комментарии:
1. Спасибо, но как это работает? 🙂
2. @AnakinSkywalker — да, по
df.replace('nan', np.nan)
3. Моя точка зрения — я хочу, чтобы у меня был выбор либо вменять средства, либо медианы, применяя функцию к столбцу.
4. @AnakinSkywalker — Не уверен, что понимаю, может быть, пробный неработающий код
df = df.fillna
необходимо удалить?5. Ладно, понял! Спасибо за ваше время и усилия!
Ответ №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'])
Комментарии:
1. Спасибо, но как поместить это в функцию, в которой я буду вменять средства или медианы?
2. @AnakinSkywalker Отредактировал мой
3. Проголосовал, но принял первый ответ в хронологическом порядке 🙂
4. @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,))