元组拆包问题

Problems with tuple unpacking

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

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'])

但是我得到了错误 "not enough values to unpack (expected 2, got 0)" 所以,在函数中,我尝试如下

retvalue = [[],[]]

但是得到的错误是 "Length of values does not match length of index" retvalue = [0,0] 没有给出任何错误,newdf['newid'],newdf['thistime'] 的值为零。

并且,当我尝试检查 if(newdf['newid']==0): 中的值是否为零时,会出现错误:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

我也试过检查 len(),但也没用。 感谢任何帮助。

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

您的代码在 returns 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

这将导致:"not enough values to unpack (expected 2, got 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.

感谢 Shailesh 和 samy 的回复。在函数内部,我使用 retvalue = [0,0] 来解决 "not enough values to unpack (expected 2, got 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'] 的值是否为零。