Beginner: TypeError: <lambda>() got an unexpected keyword argument 'func_names'
Beginner: TypeError: <lambda>() got an unexpected keyword argument 'func_names'
df['Pattern'] = df['phrases'].apply(lambda texte:Preprocess, func_names=['tokenizeTexte_0'])
import TreeTagger OK
Traceback (most recent call last):
File "classifier.py", line 41, in <module>
df['Pattern'] = df['phrases'].apply(lambda texte:Preprocess, func_names=['tokenizeTexte_0']) # modify the parameter each time you want to change the preprocess steps
File "/home/ke/anaconda3/lib/python3.7/site-packages/pandas/core/series.py", line 3194, in apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
File "pandas/_libs/src/inference.pyx", line 1472, in pandas._libs.lib.map_infer
File "/home/k/anaconda3/lib/python3.7/site-packages/pandas/core/series.py", line 3181, in <lambda>
f = lambda x: func(x, *args, **kwds)
TypeError: <lambda>() got an unexpected keyword argument 'func_names'
文件看起来像这样(这是一个例子,因为我不能放原始数据)
id phrases etiquette sous-classe
23 C'est un psychiatre canadien. Med p
56 le Pr. Moldofsky, qui a fait Med n
émerger en 1975 cette maladie,
45 en identifiant des plaintes Fed ne
78équivalentes par privation de sommeil
chez des patientes volontaires.
789 Reconnue Outre-Atlantique, Ged p
elle reste peu connue dans l'Hexagone.
执行此操作的通用方法是将函数存储在字典中,您可以在其中使用键查找所需的函数。下面是一个示例,其中我创建了一个函数 combine_functions
,它将字符串列表作为参数。这允许您选择哪个函数应该 运行 的顺序。从技术上讲,这还允许您多次 运行 相同的功能。
def func1(x):
print("I am func1")
return x
def func2(x):
print("I am func2")
return x
def func3(x):
print("I am func3")
return x
def combine_functions(x, func_names=[]):
functions = {"func1": func1,
"func2": func2,
"func3": func3}
for func_name in func_names:
x = functions[func_name](x)
return x
这似乎是您没有正确理解 apply
功能。
在 apply
中,您只需传递不带括号的函数名称,pandas 将适当地将参数发送给基于 lambda 的函数。
所以这样做是错误的
df['Pattern'] = df.apply(lambda row:Preprocess(row['phrases'], tokenizeTexte_0),...)
您只需要做:
df['Pattern'] = df.apply(lambda x:Preprocess ,...)
现在,您只想在 "phrases"
上工作。所以不需要在整个数据帧上使用 .apply
。您可以只使用:
df['Pattern'] = df['phrases'].apply(lambda texte:Preprocess, ...)
其次,您的 Preprocess
函数需要第二个参数 "func_names"
作为列表。您可以在应用中传递(而不是在预处理中),如下所示:
"已更正"
df['Pattern'] = df['phrases'].apply(Preprocess,
func_names=['tokenizeTexte_0'])
df['Pattern'] = df['phrases'].apply(lambda texte:Preprocess, func_names=['tokenizeTexte_0'])
import TreeTagger OK
Traceback (most recent call last):
File "classifier.py", line 41, in <module>
df['Pattern'] = df['phrases'].apply(lambda texte:Preprocess, func_names=['tokenizeTexte_0']) # modify the parameter each time you want to change the preprocess steps
File "/home/ke/anaconda3/lib/python3.7/site-packages/pandas/core/series.py", line 3194, in apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
File "pandas/_libs/src/inference.pyx", line 1472, in pandas._libs.lib.map_infer
File "/home/k/anaconda3/lib/python3.7/site-packages/pandas/core/series.py", line 3181, in <lambda>
f = lambda x: func(x, *args, **kwds)
TypeError: <lambda>() got an unexpected keyword argument 'func_names'
文件看起来像这样(这是一个例子,因为我不能放原始数据)
id phrases etiquette sous-classe
23 C'est un psychiatre canadien. Med p
56 le Pr. Moldofsky, qui a fait Med n
émerger en 1975 cette maladie,
45 en identifiant des plaintes Fed ne
78équivalentes par privation de sommeil
chez des patientes volontaires.
789 Reconnue Outre-Atlantique, Ged p
elle reste peu connue dans l'Hexagone.
执行此操作的通用方法是将函数存储在字典中,您可以在其中使用键查找所需的函数。下面是一个示例,其中我创建了一个函数 combine_functions
,它将字符串列表作为参数。这允许您选择哪个函数应该 运行 的顺序。从技术上讲,这还允许您多次 运行 相同的功能。
def func1(x):
print("I am func1")
return x
def func2(x):
print("I am func2")
return x
def func3(x):
print("I am func3")
return x
def combine_functions(x, func_names=[]):
functions = {"func1": func1,
"func2": func2,
"func3": func3}
for func_name in func_names:
x = functions[func_name](x)
return x
这似乎是您没有正确理解 apply
功能。
在 apply
中,您只需传递不带括号的函数名称,pandas 将适当地将参数发送给基于 lambda 的函数。
所以这样做是错误的
df['Pattern'] = df.apply(lambda row:Preprocess(row['phrases'], tokenizeTexte_0),...)
您只需要做:
df['Pattern'] = df.apply(lambda x:Preprocess ,...)
现在,您只想在 "phrases"
上工作。所以不需要在整个数据帧上使用 .apply
。您可以只使用:
df['Pattern'] = df['phrases'].apply(lambda texte:Preprocess, ...)
其次,您的 Preprocess
函数需要第二个参数 "func_names"
作为列表。您可以在应用中传递(而不是在预处理中),如下所示:
"已更正"
df['Pattern'] = df['phrases'].apply(Preprocess,
func_names=['tokenizeTexte_0'])