1

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. 

4

2 回答 2

1

这似乎是您没有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'])
于 2019-12-05T12:49:45.807 回答
1

执行此操作的通用方法是将函数存储在字典中,您可以在其中使用键来查找所需的函数。下面是一个示例,我在其中创建了一个函数,该函数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
于 2019-12-05T10:49:51.037 回答