Skip to main content
 首页 » 编程设计

Python if 语句检索 "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()."

2025年05月04日19del

我有 2 个数据集,一个列表 r 和一个数据框 df。

r = [1,1,1,1,1,1,1,1,2,2] 
 
df 
 
|----|----|----|----|----|----|----|----|----|----| 
| d1 | d2 | d3 | d4 | d5 | d6 | d7 | d8 | d9 | d10| 
|----|----|----|----|----|----|----|----|----|----| 
|  0 |  0 |  1 |  0 |  0 |  1 |  1 |  0 |  1 |  1 | 
|  1 |  0 |  1 |  1 |  0 |  0 |  1 |  1 |  1 |  1 | 
|  1 |  1 |  0 |  1 |  1 |  0 |  1 |  0 |  0 |  0 | 
|  0 |  0 |  0 |  1 |  0 |  1 |  1 |  1 |  1 |  1 | 

我正在尝试运行一个 if 语句来评估从 df 与 r 中选择的随机值。 但是我得到一个错误。

this link 中的帖子有点暴露问题,我确实尝试了这些方法,但似乎没有用。

我尝试使用上面链接和错误中建议的方法 (.any() , .all(), .bool()) 但看不到让它工作。

df1 = df.sample(n=1) 
if(df1 <= r): 
    df 
    r-=df 

例如,如果检索 df 的第一行,我希望将 r 分配如下 (r):

r = [1,1,0,1,1,0,0,1,1,1]

请您参考如下方法:

if 将引发错误,因为您要求比较两组数据,每组数据都具有多个值,这是不明确的。这就是为什么 numpy 要求您应用 any() 或 all() 以将其传递给 if。

至于你的问题。您应该将 r 定义为一个数组:

r = np.asarray(r) 

然后,如果您只想修改 r(逐个值并根据您的比较),请使用掩码进行修改:

df1 =  df.sample(1).values.ravel()   #to transform the row into a flat array 
r -= (df1 * (df1<=r))