元组解包的问题

2024-10-02 02:28:21 发布

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

在函数中,如果值存在,我将返回一个包含两个值的列表,或者返回一个空列表,如下所示:

def func1(prikey):
    try:
      df = somesql
      for index, rW in df.iterrows():
          retvalue = [rW['id_in_int'],rW['time_in_str']]
    except:
        retvalue = []
    return retvalue

在主代码中,我为变量赋值:

newdf['newid'],newdf['thistime'] = func1(newdf['prikey'])

但我得到了错误“没有足够的值来解包(预期为2,得到0)” 因此,在函数中,我尝试如下

retvalue = [[],[]]

但由于“值的长度与索引的长度不匹配”而导致错误 并且retvalue = [0,0]没有给出任何错误,newdf['newid'],newdf['thistime']的值为零

而且,当我试图检查进一步的行中的值是否为零时,如if(newdf['newid']==0):,这会产生错误:序列的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all()

我也试着检查了一下{},但也没用。 感谢您的帮助


Tags: 函数indf列表def错误rwtry
3条回答

下面的代码返回1个列表

def func1(prikey):
    try:
      df = somesql
      for index, rW in df.iterrows():
          retvalue = [rW['id_in_int'],rW['time_in_str']]  #here 1 list!
    except:
        retvalue = [] #here 1 list!
    return retvalue

这将导致在下一条语句中出现“没有足够的值来解包(预期为2,得到0)”错误:

newdf['newid'],newdf['thistime'] = func1(newdf['prikey'])

由于您描述的其他错误没有示例代码:

The 'or' and 'and' python statements require truth-values. If these are considered ambiguous you should use "bitwise" | (or) or & (and) operations. Check this one

我想您不能将0指定给列。尝试分配“”(空字符串)或np.NaN。另外newdf['newid']属于Series类型,您无法将其与bool进行比较,因此可以使用newdf['newid'].emptylen(newdf['newid']) == 0

谢谢Shailesh和samy的回复。在函数内部,我使用retvalue = [0,0]来解决“没有足够的值来解包(预期为2,得到0)”错误

文章https://towardsdatascience.com/apply-and-lambda-usage-in-pandas-b13a1ea037f7帮助我在本系列中使用“.apply”,下面是代码

newdf['newwaittime'] = newdf['newid'].apply(lambda x: 0 if x==0 else get_new_wait_time(x))

我在检查newdf['newid']的值是否为零

相关问题 更多 >

    热门问题