Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有人能解释一下map函数的作用吗?_Python_Pandas_Dataframe_Nltk - Fatal编程技术网

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函数@阿汉