我有一个原始数据框,我可以从中创建一个修改后的数据框,但是在某些情况下,我有兴趣选择我的数据的一个子集而不是使用整个数据框,但我希望这一切在我选择使用数据子集的整个函数中完成,但是是否可以根据条件返回不同的变量或者这是不正确的。
下面的函数在我运行时工作正常
modified_df = modify_data(protein_embeddings, protein_df, subset = False)
但是当我尝试执行时:
gal_subset_first, gal_subset_second = modify_data(protein_embeddings, protein_df, 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, 2, 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.
关于python - 根据条件语句返回嵌套函数中的各种变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64116755/