如何将 lambda 函数正确应用到 pandas 数据框列

Posted

技术标签:

【中文标题】如何将 lambda 函数正确应用到 pandas 数据框列【英文标题】:How to properly apply a lambda function into a pandas data frame column 【发布时间】:2016-09-22 12:45:20 【问题描述】:

我有一个 pandas 数据框 sample,其中一个名为 PR 的列正在对其应用 lambda 函数,如下所示:

sample['PR'] = sample['PR'].apply(lambda x: NaN if x < 90)

然后我收到以下语法错误消息:

sample['PR'] = sample['PR'].apply(lambda x: NaN if x < 90)
                                                         ^
SyntaxError: invalid syntax

我做错了什么?

【问题讨论】:

也许尝试将NaN更改为np.nan 你不需要任何花哨的功能。只需分配它:sample.PR[sample.PR &lt; 90] = np.nan 【参考方案1】:

你需要mask:

sample['PR'] = sample['PR'].mask(sample['PR'] < 90, np.nan)

locboolean indexing 的另一种解决方案:

sample.loc[sample['PR'] < 90, 'PR'] = np.nan

示例:

import pandas as pd
import numpy as np

sample = pd.DataFrame('PR':[10,100,40] )
print (sample)
    PR
0   10
1  100
2   40

sample['PR'] = sample['PR'].mask(sample['PR'] < 90, np.nan)
print (sample)
      PR
0    NaN
1  100.0
2    NaN
sample.loc[sample['PR'] < 90, 'PR'] = np.nan
print (sample)
      PR
0    NaN
1  100.0
2    NaN

编辑:

apply 的解决方案:

sample['PR'] = sample['PR'].apply(lambda x: np.nan if x < 90 else x)

时间安排 len(df)=300k:

sample = pd.concat([sample]*100000).reset_index(drop=True)

In [853]: %timeit sample['PR'].apply(lambda x: np.nan if x < 90 else x)
10 loops, best of 3: 102 ms per loop

In [854]: %timeit sample['PR'].mask(sample['PR'] < 90, np.nan)
The slowest run took 4.28 times longer than the fastest. This could mean that an intermediate result is being cached.
100 loops, best of 3: 3.71 ms per loop

【讨论】:

似乎没有做我需要的。这个想法是用 NaN 填充 'PR' 列中小于 90 的所有值。 应用解决方案也有效,将采取应用解决方案。谢谢。 @jezrael 如何在值之间使用 lambda x @jezrael 对于这个问题我想要介于 5 和 10 之间的值 ***.com/questions/51972853/… @YogeshSP - 使用a = df.groupby('BusId').Fair.agg('gt5': lambda x: (x.between(3, 10)).sum())【参考方案2】:

您需要在 lambda 函数中添加 else。因为你是在告诉你在满足你的条件(这里是 x

sample['PR'] = sample['PR'].apply(lambda x: 'NaN' if x < 90 else x) 

【讨论】:

以上是关于如何将 lambda 函数正确应用到 pandas 数据框列的主要内容,如果未能解决你的问题,请参考以下文章

将 pandas/scikit-learn 包添加到您的项目以在 AWS lambda 中使用的正确方法是啥

在 pandas 中将 lambda 函数应用于列失败

使用 Lambda 函数 Pandas 设置列值

支持 Nan 的 Pandas Lambda 函数

Pandas:如何更快地应用数据框?

Pandas:如何更快地应用数据框?