在lambda函数中使用列表推导式处理pandas n-gram列时报错如何解决?
问题修复方案
错误原因
你写的代码存在语法问题:列表推导式缺少外层方括号,代码会被识别为将生成器表达式直接传入apply方法,此时循环变量row超出lambda的作用域范围,因此触发NameError。
修复代码
将列表推导式用方括号包裹即可,正确写法如下:
data['n_grams'] = data['n_grams'].apply(lambda row: [" ".join(x) for x in row])
如果你的数据中存在单元素元组被识别为普通字符串的情况(比如(thanks)没有加逗号会被python判定为字符串而非元组),可以用下面的兼容写法:
data['n_grams'] = data['n_grams'].apply(lambda row: [" ".join(x) if isinstance(x, tuple) else x for x in row])
效果验证
运行上述代码后,n_grams列的每个元组都会被拼接为空格分隔的字符串,最终输出和你预期的格式完全一致。
内容的提问来源于stack exchange,提问作者mjoy
相关产品推荐
相关产品推荐

