首页 > 解决方案 > Python,为什么这个 lambda 函数不正确?

问题描述

flight_data 是熊猫中的数据框:

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

如何使用 lambda 函数在 1 行中执行此操作?

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

为什么这两个不等价?

打印出数据时,NaN 不会被 0 代替。

标签: pythonpython-3.xpandasdataframe

解决方案


不要使用lambda

lambda只在这里混淆逻辑。只需指定范围内的列并fillna直接使用:

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

如何使用 lambda 函数在 1 行中执行此操作?

但是要回答您的问题,您可以在依赖于副作用map或列表理解的情况下做到这一点:

df = df.assign(**df.pipe(lambda x: {c: x[c].fillna(0) for c in x.filter(like='Delay')}))

推荐阅读