Pandas报”ValueError:operands could not be broadcast together with shapes “的原因以及解决办法

yizhihongxing

出现该错误常常是因为两个数组在做运算时,它们的形状不匹配(也就是说,它们的维数或尺寸或者某些轴上的长度不同),这就会导致无法完成相应的运算。

Pandas是依赖于NumPy库来工作的,所以在使用Pandas的时候,经常会和NumPy打交道。以下是一些常见的情形和解决办法:

1.多维数组的形状不同。

错误代码:

a = np.array([[1,2], [3,4]])
b = np.array([10,20,30,40])
c = a+b
# ValueError: operands could not be broadcast together with shapes (2,2) (4,)

错误原因:将一个长度为4的数组加到一个2 x 2的数组上显然是不合法的,因为这两个矩阵的形状不同。

在这种情况下,可以通过调整一个或多个数组的维度来匹配它们的形状。例如,我们可以将数组b转化为长度为1的一维数组,然后使用广播机制来将其扩展到2 x 2的形状,如下所示:

b = np.array([10,20,30,40]).reshape(2,2)
c = a+b

结果如下:

array([[11, 22],
       [33, 44]])

2.维数不同。

错误代码:

a = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
b = pd.DataFrame({'A': [1, 2, 3]})

a+b

# ValueError: operands could not be broadcast together with shapes (3,2) (3,)

错误原因:这个错误发生在Pandas中,因为dataframe的列数量必须相同。在这种情况下,我们可以添加一个列,与另一个dataframe的列数量相匹配,如下所示:

b['B'] = 0
c = a+b

结果如下:

      A     B
0     2     4
1     4     5
2     6     6

3.两个数组的维度相同,但某些轴上的长度不同。

错误代码:

a = np.array([1,2,3])
b = np.array([[1], [2], [3], [4]])
c = a+b

# ValueError: operands could not be broadcast together with shapes (3,) (4,1)

错误原因:这个错误的原因是,a的形状是(3,),即它是一个一维数组,而b的形状是(4,1),它是一个二维数组。因此,在这个例子中,a无法与b相加。

为了解决这个问题,我们可以使用reshape方法来调整数组的形状,使它们能够进行运算,例如:

a = np.array([1,2,3]).reshape(3,1)
b = np.array([[1], [2], [3], [4]])
c = a+b

结果如下:

array([[2, 3, 4, 5],
       [3, 4, 5, 6],
       [4, 5, 6, 7]])

总之,“ValueError: operands could not be broadcast together with shapes”这个错误的原因往往与数组的形状有关。

如果你遇到了这个错误,就要仔细检查数组的形状,看看它们是否匹配,如果不匹配,就需要调整数组的形状,或者使用其他方法来处理它们。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pandas报”ValueError:operands could not be broadcast together with shapes “的原因以及解决办法 - Python技术站

(1)
上一篇 2023年3月15日
下一篇 2023年3月15日

相关文章

合作推广
合作推广
分享本页
返回顶部