Почему это понимание возвращает генератор? - PullRequest
0 голосов
/ 04 июля 2018

Это следующий вопрос, который я только что прочитал: DataFrame, apply, lambda, понимание списка .

Итак, я попробовал следующий код

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 Итак, мой вопрос: почему он возвращает генератор, а не рассматривает его как список элементов? Я знаю, что такое выражения-генераторы, но я не могу понять, почему это выражение обрабатывается как генератор, а не как список (или лямбда-выражение)?

1 Ответ

0 голосов
/ 04 июля 2018

списки имеют квадратные скобки []. если у вас нет [] квадратных скобок, у вас есть выражение генератора

.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.

...