使用np.where函数时出现“无法使用长度与值不同的多索引选择索引器进行设置”错误

2024-06-16 08:58:13 发布

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

我正在尝试按行迭代地追加两个数据帧。之后,我尝试用其他列中的值填充一列中的0值,反之亦然。我使用np.where函数来填充0值。当我单独进行时,它给出了正确的结果,但当我在循环中使用它时,它抛出了“无法使用长度与值不同的多索引选择索引器进行设置”错误。我的代码如下所示

def myfunc(dd1,dd2,dfc):
n=dd1.shape[0]
for i in range(n):
    dfc2=dd1.iloc[i:i+1].append(dd2.iloc[i:i+1])
    dfc=dfc.append(dfc2)
m=dfc.shape[0]
for j in range(m):
    dfc.iloc[j:j+1,2:3]=np.where(dfc.iloc[j:j+1,2:3]==0,dfc.iloc[j+1:j+2,3:4],dfc.iloc[j:j+1,2:3])
    dfc.iloc[j+1:j+2,3:4]=np.where(dfc.iloc[j+1:j+2,3:4]==0,dfc.iloc[j:j+1,2:3],dfc.iloc[j+1:j+2,3:4])
return dfc

当dd1和dd2是我的数据帧时,我将迭代地将其中的行追加到空数据帧dfc。这里我使用行和列索引来填充值。在此方面的任何帮助都将不胜感激


Tags: 数据函数infor错误nprangewhere
1条回答
网友
1楼 · 发布于 2024-06-16 08:58:13

np.where不是这样工作的。np.where的输入是一个类似列表的对象。与循环数据帧中的每个数据并将其馈送到np.where不同,您应该将整个数组输入到np.where

dfc.iloc[:,2:3] = np.where(dfc.iloc[:,2:3]==0,dfc.iloc[:,3:4].shift(-1),dfc.iloc[:,2:3])
dfc.iloc[:,3:4] = np.where(dfc.iloc[:,3:4]==0,dfc.iloc[:,2:3],dfc.iloc[:,3:4].shift(-1))

现在应该可以了。请注意pd.DataFrame.iloc,如果要将其指定给新值,请避免使用它。我建议你改用loc。我的脚本可能有潜在的错误,这取决于您的版本

相关问题 更多 >