Python 有人能解释一下map函数的作用吗?
我需要帮助理解以下代码Python 有人能解释一下map函数的作用吗?,python,pandas,dataframe,nltk,Python,Pandas,Dataframe,Nltk,我需要帮助理解以下代码 df_all['search_term'] = df_all['search_term'].map(lambda x:str_stemmer(x)) 完整代码的链接: 谢谢。我看了其他问题,它们似乎并没有真正解释您的问题-map函数做什么 map接受一个iterable和一个函数,并将该函数依次应用于iterable中的每个元素 下面是一个例子: def square_the_things(value): print('Squaring {}'.format(
df_all['search_term'] = df_all['search_term'].map(lambda x:str_stemmer(x))
完整代码的链接:
谢谢。我看了其他问题,它们似乎并没有真正解释您的问题-
map
函数做什么
map
接受一个iterable和一个函数,并将该函数依次应用于iterable中的每个元素
下面是一个例子:
def square_the_things(value):
print('Squaring {}'.format(value))
return value * value
items = [1,2,3,4,5]
squared_items = map(square_the_things, items)
for squared in squared_items:
print('Squared item is: {}'.format(squared))
输出
Squaring 1
Squared item is: 1
Squaring 2
Squared item is: 4
Squaring 3
Squared item is: 9
Squaring 4
Squared item is: 16
Squaring 5
Squared item is: 25
请注意,我们正在将函数名传递到映射
,末尾没有()
。lambda只是一个没有名字的函数。在您的例子中,实际上可以只传入.map(str\u stemmer)
,因为它只需要一个参数
浏览我的示例,您可以看到第一个输出来自函数-平方1
。然后它经过循环的第一次迭代并显示平方项is:1
。这是因为我使用的是Python3,map
是一个迭代器。在Python2中,它输出不同的内容:
Squaring 1
Squaring 2
Squaring 3
Squaring 4
Squaring 5
Squared item is: 1
Squared item is: 4
Squared item is: 9
Squared item is: 16
Squared item is: 25
这是因为它首先在iterable上应用函数并生成一个列表。的工作原理与Python的map稍有不同
假设你有一本小字典,里面有一些常用词的词根:
roots_dict = {"going": "go", "went": "go", "took": "take", "does": "do",
"thought": "think", "came": "come", "begins": "begin"}
您还有一个数据框,在该数据框中有一列单词:
df = pd.DataFrame({"word": ["took", "gone", "done", "begins", "came",
"thought", "took", "went"]})
word
0 took
1 gone
2 done
3 begins
4 came
5 thought
6 took
7 went
如果您需要显示这些单词词根的附加列,可以使用map。对于该系列(列)中的每个元素,map检查字典中该单词是否作为键存在。如果是,则返回值;否则它将返回NaN
:
df["root"] = df["word"].map(roots_dict)
word root
0 took take
1 gone NaN
2 done NaN
3 begins begin
4 came come
5 thought think
6 took take
7 went go
你也可以传递一个系列,而不是字典。在这种情况下,它会检查序列的索引
在您的示例中,它与函数一起工作。该函数设计用于获取字符串(可能包含多个单词),将其转换为所有小写字母,将其拆分为单词,并将NLTK的Snawball词干分析器应用于每个单词。因此,使用
df_all['search_term'].map(lambda x:str_stemmer(x))
时,“search_term”列中的每一行(x是该行中的字符串)都是str_stemmer()的输入.map
组合该函数返回的元素,并返回另一个序列,其中所有单词都有根。如果不看stru stemmer
的定义,很难说清楚?但基本上,它会在你的专栏的每个元素上调用str\u stemmer
“搜索词”
,给出一个例子,但不清楚你缺乏理解的地方是什么。这通常是我说你误读了问题的地方,除非在这种情况下提问者写错了。谢谢你,阿扬。我也从一家公司跟进了此事。”lambda'是一个匿名函数,用于创建与其词干版本相关的单词词典。然后这个字典作为参数传递给map函数@阿汉