这是我刚才阅读的跟进问题:DataFrame, apply, lambda, list comprehension。
所以我尝试了以下代码
import pandas as pd
# This is a dataframe containing the correct values
correct = pd.DataFrame([{"letters":"abc","data":1},{"letters":"ast","data":2},{"letters":"bkgf","data":3}])
# This is the dataframe containing source data
source = pd.DataFrame([{"c":"ab"},{"c":"kh"},{"c":"bkg"}])
temp_result = source["c"].apply(lambda x: i for (i,row) in correct.values)
所以我尝试了这样的不同变化
temp_result = source["c"].apply(lambda x: i for (i,row) in correct.iteritems())
所有人都返回错误:Genrator object is not callable
所以我的问题是为什么它返回一个生成器而不是将其视为项目列表?我知道什么是生成器表达式,但是我无法理解为什么将此表达式视为生成器而不是列表推导(或lambda表达式)?
答案 0 :(得分:1)
列表推导式带有[]
方括号。
如果没有[]
方括号,则有一个生成器表达式
.apply(lambda x: (i for (i,row) in correct.iteritems()))
上面的代码将创建一个返回生成器表达式的函数,并将其传递给.apply
.apply([lambda x: i for (i,row) in correct.iteritems()])
上面的代码将创建一个函数列表,并将该列表传递给.apply
.apply(lambda x: [i for (i,row) in correct.iteritems()])
上面的代码将使函数返回列表,并将其传递给.apply
。