微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据条件语句在嵌套函数中返回各种变量

如何解决根据条件语句在嵌套函数中返回各种变量

我有一个原始数据框,可以从中创建修改的数据框,但是在某些情况下,我有兴趣选择数据的一个子集,而不是整体使用该数据框,但是我希望所有这些可以在我选择使用数据子集的整个函数中完成,但是有可能基于条件返回不同的变量,或者这是不正确的。

我运行时下面的功能正常工作

modified_df = modify_data(protein_embeddings,protein_df,subset = False)

但是当我尝试执行时:

gal_subset_first,gal_subset_second = modify_data(protein_embeddings,subset = True)

我得到了错误

ValueError: too many values to unpack (expected 2)

功能

def modify_data(embeddings,df,subset = False):

    """
    Modifies Original Dataframe with respective embedddings

    :return: Final Dataframe to be used in data split and modelling
    """
    #Original_DF
    OD_df = df.copy(deep = True)
    OD_df = df.reset_index()
    OD_df.loc[:,'task'] = 'stability'
    
    #Embeddings Df
    embeddings_df = pd.DataFrame(data=embeddings)
    embeddings_df = embeddings_df.reset_index()   
    
    embedded_df = pd.merge(embeddings_df,OD_df,on='index')
    embedded_df = embedded_df.drop(['index','sequence','temperature'],axis = 1)
    
    def subsetting(embedded_df,sample_no,row_no):
        "Select a Subset of rows desired from original dataframe"
        #Selecting subset
        embedded_df = embedded_df.sample(n = sample_no)
        subset_first = gal_subset[:row_no]
        subset_second = gal_subset[row_no:]
    
        return subset_first,subset_second

    if subset == True:
        gal_subset_first,gal_subset_second = subsetting(embedded_df,sample_no = 2000,row_no = 1000)
    else:
        pass  
         
    
    return embedded_df

解决方法

您的函数返回一个可迭代的数据帧。将结果分配给一个变量时,整个数据帧将被写入变量。但是,如果为结果分配多个变量,Python将迭代返回的值,并检查变量数是否与数据框迭代器项匹配。

比较代码示例:

def f():
    return (1,2,3)

a = f()  # a is a tuple (1,3)
a,b = f()  # raises the same exception ValueError: too many values to unpack (expected 2)
a,b,c = f()  # a=1 b=2 c=3 because the number of returned values matches the number of the assigned variables.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。