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