“generator”对象在列表压缩的for循环内时不可调用

2024-05-13 23:03:52 发布

您现在位置:Python中文网/ 问答频道 /正文

运行此程序时出现以下错误:

df['initial_referrer'].apply(lambda x: value.split("utm_campaign=",1)[1] if 'utm_campaign' in value else np.nan for value in x.split('&'))

TypeError: 'generator' object is not callable

我不知道这个错误的含义以及如何修改我的这个来摆脱这个错误。我在这里读过一些类似的问题,但不知道我们的问题是什么。在

所以我在df['initial_referer']中有如下值:

^{pr2}$

在这篇文章中,我想提取utm_campaign的值,即login-day1,这就是为什么我使用for循环和if语句,它需要花费大量的时间/天来处理20mil行。因此,我想使用生成器表达式或列表压缩来更快地处理它。在


Tags: lambdain程序dfforifvalue错误
1条回答
网友
1楼 · 发布于 2024-05-13 23:03:52

首先将apply正则函数一起使用是很有启发性的:

def func(x):
    return [value.split("utm_campaign=",1)[1] if 'utm_campaign' in value else np.nan \
            for value in x.split('&')]

df['initial_referrer'].apply(func)

注意表示列表理解的方括号。您需要将其转换为您的lambda函数:

^{pr2}$

但后者是不可读的。你最好写一个常规函数。在

注意pd.Series.apply是一个Python级别的循环。您可以改为使用map,这样可能会提高性能:

df['initial_referrer'] = list(map(func, df['initial_referrer'].values))

甚至是列表理解:

df['initial_referrer'] = [func(x) for x in df['initial_referrer'].values]

相关问题 更多 >