Python, почему эта функция lamdba не верна? - PullRequest
0 голосов
/ 27 октября 2018

flight_data - это датафрейм в панде:

  for c in flight_data.columns:
      if ('Delay' in c):
          flight_data[c].fillna(0, inplace = True)

Как мне сделать это в 1 строку, используя лямбда-функцию?

map(lambda c: flight_data[c].fillna(0, inplace = True), list(filter(lambda c : 'Delay' in c, flight_data.columns)))

Почему эти два эквивалента не равны?

При распечатке данных NaN не заменяется на 0.

1 Ответ

0 голосов
/ 27 октября 2018

Не использовать lambda

lambda здесь только запутывает логику. Просто укажите столбцы в области видимости и используйте fillna напрямую:

cols = df.filter(like='Delay').columns
df[cols] = df[cols].fillna(0)

Как мне сделать это в 1 строку, используя лямбда-функцию?

Но чтобы ответить на ваш вопрос, вы можете сделать это , не полагаясь на побочные эффекты map или понимание списка:

df = df.assign(**df.pipe(lambda x: {c: x[c].fillna(0) for c in x.filter(like='Delay')}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...