new_array=np.zeros((4,12,100,9)) 2 for i in range(len(df_array)): ----> 3 new_array[df_array[i][5]-2013][df_array[i][6]-1][df_array[i][1]][df_array[i][2]]+=df_array[i][3] 4 df_new = pd.DataFrame(columns=['创建年', '创建月', '物料编号', '应发库', '销售订单数量']) IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices需要如何更改
时间: 2023-10-08 11:12:17 浏览: 79
这个错误是因为在使用索引时,使用了非整数类型的值。可能是因为df_array中的某些值不是整数类型导致的。你可以使用astype()方法将其转换为整数类型。另外,代码中的第3行需要将df_array的长度存储在变量中,以避免在循环中多次计算。下面是修改后的代码:
```
df_array = df_array.astype(int)
array_len = len(df_array)
new_array = np.zeros((4, 12, 100, 9))
for i in range(array_len):
new_array[df_array[i][5]-2013][df_array[i][6]-1][df_array[i][1]][df_array[i][2]] += df_array[i][3]
df_new = pd.DataFrame(columns=['创建年', '创建月', '物料编号', '应发库', '销售订单数量'])
```
希望能对你有所帮助。
相关问题
1 new_array=np.zeros((4,12,100,9)) 2 for i in range(len(df_array)): ----> 3 new_array[df_array[i][5]-2013][df_array[i][6]-1][df_array[i][1]][df_array[i][2]]+=df_array[i][3] 4 df_new = pd.DataFrame(columns=['创建年', '创建月', '物料编号', '应发库', '销售订单数量']) 5 i=0 IndexError: index -1953 is out of bounds for axis 0 with size 4需要如何修改
根据报错信息,问题出现在第3行代码中。你需要确保索引值不会超出数组`new_array`的范围。根据代码中的数组大小,你应该确保`df_array`中的索引值在以下范围内:
- `df_array[i][5]`的值在2013到2016之间
- `df_array[i][6]`的值在1到12之间
- `df_array[i][1]`的值在0到99之间
- `df_array[i][2]`的值在0到8之间
如果索引值超出了这个范围,你需要修改代码以确保索引值在范围内。例如,你可以添加以下代码行来检查索引值:
```
if df_array[i][5] < 2013 or df_array[i][5] > 2016 or df_array[i][6] < 1 or df_array[i][6] > 12 or df_array[i][1] < 0 or df_array[i][1] > 99 or df_array[i][2] < 0 or df_array[i][2] > 8:
continue
```
这将跳过超出范围的索引值,而不是尝试使用它们来访问`new_array`中的元素。
另外,你可能还需要检查`df_array`的大小和内容,以确保它包含正确的数据。如果`df_array`中的数据不正确,则可能会导致`IndexError`。
new_array=np.zeros((4,12,100,9)) for i in range(len(df_array)): new_array[df_array[i][5]-2013][df_array[i][6]-1][df_array[i][1]][df_array[i][2]]+=df_array[i][3] df_new = pd.DataFrame(columns=['创建年', '创建月', '物料编号', '应发库', '销售订单数量']) i=0 for year_ in range(4): for month_ in range(12): for index_ in range(100): for warehouse_ in range(9): if new_array[year_][month_][index_][warehouse_]>0: df_new=df_new.append(pd.DataFrame({'创建年':year_+2013,'创建月':month_+1,'物料编号':index_,'应发库':warehouse_,'销售订单数量':new_array[year_][month_][index_][warehouse_]},index=[i])) i+=1 print(df_new)是否正确?
这段代码是在对`new_array`进行处理之后,将得到的结果存入`df_new`数据框中。代码中,首先定义了一个`df_new`的空数据框,用于存储处理后的结果。然后使用四重for循环遍历`new_array`,将大于0的元素添加到`df_new`中。最后打印出`df_new`的内容。
根据代码的逻辑,这段代码应该是正确的。但是需要根据具体的数据集进行验证。
阅读全文