ValueError:在datafram中创建多列时,要解包的值太多(应为4)

2024-06-14 04:19:11 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我编写了一个函数,它使我能够根据我想要在我的数据帧中创建新列的内容,我想要更新我的函数,使它能够同时创建4列,而不是1列,这取决于所选的功能。你知道吗

我的职责如下:

def adding_column(file, func_name = 'all'):

    #df = read_excel(file, sheet_name= my_sheet)

    if func_name == 'step1':
        df['column_0'] = df.apply(lambda x: process(x['original'], func_names=["func0"]), axis=1) 

    elif func_name== 'step2': # you
        df['column_1'] = df.apply(lambda x: process(x['original'], func_names=["func1"]), axis=1)
    elif func_name== 'step3': # you
        df['column_2'] = df.apply(lambda x: process(x['original'], func_names=["func2"]), axis=1)

    elif func_name== 'step4':
        df[column_3'] = df.apply(lambda x: process(x['original'], func_names=["func3"]), axis=1)

    elif func_name == 'all':
        df['column_0'], df['column_1'], df['column_2'], df['column_3'] = df.apply(lambda x: process(x['original'], func_names=["func0","func1","func2","func3"]), axis=1)
        print(df.apply(lambda x: process(x['original'], func_names =["func0","func1","func2","func3"]), axis=1))
    else:
        raise Exception("Wrong feature type entered.)


    # if you want to take a look a the file
    # print( df.head())
CreateColumn(df)

运行函数时出现以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-72-53faabfa700e> in <module>
     38     df.to_excel('output.xlsx')
     39 
---> 40 CreateColumn(df)
     41 
     42 # Another solution

<ipython-input-72-53faabfa700e> in CreateColumn(file, func_name)
     28 
     29    elif func_name == 'all':
---> 30        df['column_0'], df['column_1'], df['column_2'], df['column_3'] = df.apply(lambda x: process(x['original'], func_names=["func0","func1","func2","func3"]), axis=1)
      31      print(df.apply(lambda x: process(x['original'], func_names=["func0","func1","func2","func3"]), axis=1))
     32     else:

ValueError: too many values to unpack (expected 4)

正在尝试打印,只是显示标签出现的最后一个函数(func3),如何处理

0      noun verb noun pron verb noun adj verb noun ad...
1            aux verb noun verb verb adp noun propn pron
2      verb adp noun adp noun pron verb pron verb pro...
3                        noun adp noun adj noun verb adj
4      adv verb noun noun adj noun adj noun adj verb ...
5      adp adj det noun pron verb adp noun verb verb ...
6      noun pron pron verb adp noun adp noun pron pro...
7      adp pron adj propn pron verb adj adp adp verb ...
8      pron pron verb verb adp det noun det noun noun...

过程函数如下所示:

def process(texte, func_names=[]):
    functions = {"func_o": func_o, #not useful
            "func0": func0,
            "func1": func1,
            "func2": func2,
            "func3": func3}

    for func_name in func_names:
        texte = functions[func_name](texte)

    return texte


Tags: lambdanamedfnamescolumnprocessfuncapply