元组拆包问题

问题描述 投票:0回答:3

在函数中,如果有值或空列表,则返回两个值的列表,如下所示:

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()

我也尝试检查len(),但也没有用。任何帮助表示赞赏。

python iterable-unpacking
3个回答
0
投票

下面的代码将返回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'])

因为您所描述的另一个错误没有示例代码:

'or'和'and'python语句需要真值。如果这些是被认为模棱两可的你应该使用“按位” (或)或&(和)操作。 Check this one


0
投票

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


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']的值是否为零。

© www.soinside.com 2019 - 2024. All rights reserved.