ValueError:操作数不能与形状(1521,)(1521,1522)()一起广播

时间:2019-05-17 21:30:38

标签: python pandas

我有一个大的数据帧df,其中该帧的示例为:

           A       B
0          0    4140
1   0.142857    1071
2          0    1196
3   0.090909    2110
4   0.083333    1926
5   0.166667    1388
6          0    3081
7          0    1149
8          0    1600
9   0.058824    1873
10         0    3960
:          :       :
19         0    4315
20         0    2007
21  0.086957    3323
22  0.166667    1084
23       0.5    2703
24         0    1214
25         0    1955
26         0    6750
27         0    3240
28         0    1437
29         0    1701

我使用以下方法将列A除以列B

df['new_column'] = np.where(df['A'] = 0, 0.0, df['A'].divide(df['B']))*90.0

但是我遇到错误:

ValueError: operands could not be broadcast together with shapes (1521,) (1521,1522) () 

使用df.A.shape的A列的形状为(1521,) 使用df.B.shape的B列的形状为(1521, 1)

我看到形状不同;改变形状会解决问题吗?如果是这样,我如何将形状更改为相同?

1 个答案:

答案 0 :(得分:1)

错误地将数据帧传递到np.where时,您的错误看起来非常相似。您能否检查您通过了df['A']和'df['B'],而不是df[['A']]和'df[['B']]。因为将混合序列和数据帧传递到np.where将导致这些错误。

示例 :(我只使用部分示例数据,所以我的df只有11行)

np.where(df['A'] == 0, 0.0, df[['A']].divide(df['B']))*90.0

返回错误:

ValueError: operands could not be broadcast together with shapes (11,) () (11,12)`

和:

np.where(df['A'] == 0, 0.0, df['A'].divide(df[['B']]))*90.0

返回错误:

TypeError: 'int' object is not iterable