Преобразование лямбда-функции в обычную функцию

Я пытаюсь понять, как преобразовать лямбда-функцию в обычную. У меня есть эта лямбда-функция, которая должна заполнять нулевые значения каждого столбца режимом

def fill_nn(data):
    df= data.apply(lambda column: column.fillna(column.mode()[0]))
    return df

Я пробовал это:

def fill_nn(df):
    for column in df:
        if df[column].isnull().any():
            return df[column].fillna(df[column].mode()[0])

Было бы просто def func(column): return column.fillna(column.mode()[0])

juanpa.arrivillaga 23.11.2022 19:44

Нет необходимости в if. Если нулевых значений нет, fillna() ничего не сделает.

Barmar 23.11.2022 19:45

Лямбда-выражение lambda <args>: <expression> всегда эквивалентно def name(<args>): return <expression>

juanpa.arrivillaga 23.11.2022 19:45

@juanpa.arrivillaga Вы отвечаете на заголовок, а не на вопрос. Она пытается полностью отказаться от использования apply().

Barmar 23.11.2022 19:46

@Barmar В этом случае я хочу заменить нулевые значения столбца (если есть) режимом, но если нет нулевых значений, будут сохранены те, которые уже есть

Dani 23.11.2022 20:18

Вот что делает fillna(). Он оставляет все ненулевые значения в покое. Если нулевых значений нет, весь столбец остается без изменений. Так что проверка перед вызовом не нужна.

Barmar 23.11.2022 21:29
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
6
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Привет 👋 Надеюсь у тебя все хорошо!

Если я правильно понял ваш вопрос, то наилучший способ будет похож на этот:

import pandas as pd


def fill_missing_values(series: pd.Series) -> pd.Series:
    """Fill missing values in series/column."""

    value_to_use = series.mode()[0]
    return series.fillna(value=value_to_use)


df = pd.DataFrame(
    {
        "A": [1, 2, 3, 4, 5],
        "B": [None, 2, 3, 4, None],
        "C": [None, None, 3, 4, None],
    }
)

df = df.apply(fill_missing_values)  # type: ignore

print(df)
#    A    B    C
# 0  1  2.0  3.0
# 1  2  2.0  3.0
# 2  3  3.0  3.0
# 3  4  4.0  4.0
# 4  5  2.0  3.0

но лично я бы все равно использовал lambda, так как он требует меньше кода и его легче обрабатывать (особенно для такой небольшой задачи).

Другие вопросы по теме