如何在Python的for循环中向数组追加每次迭代的结果?
如何在for循环中向数组追加每次迭代的结果?
问题代码
data = np.array([]) for sheet in sheets: result = pd.read_excel(file_loc, sheet_name = sheet,usecols="Q").dropna() result = result.values.tolist() result = result[1:] print(result)
当前输出
每次循环中print(result)返回:
[1 , 2 , 3] [4 , 5 , 6] [7 , 8 , 9]
期望输出
最终print(data)的结果为:
[[1 , 2 , 3], [4 , 5 , 6], [7 , 8 , 9]]
解决方案
方法1:用Python列表收集结果(推荐,效率更高)
numpy数组的内存是连续分配的,每次追加都会重新开辟内存,数据量大时性能较差。更高效的方式是先用Python列表收集所有结果,最后再转换为numpy数组:
# 初始化空列表用于存储每次迭代结果 data_list = [] for sheet in sheets: result = pd.read_excel(file_loc, sheet_name=sheet, usecols="Q").dropna() result = result.values.tolist() result = result[1:] # 将当前迭代的结果追加到列表中 data_list.append(result) # 将列表转换为numpy数组 data = np.array(data_list) print(data)
方法2:直接使用numpy的append方法
如果一定要直接操作numpy数组,可以用np.append,但注意要保持数组维度一致(每次追加二维数组):
data = np.array([]) for sheet in sheets: result = pd.read_excel(file_loc, sheet_name=sheet, usecols="Q").dropna() result = result.values.tolist() result = result[1:] # 第一次循环时初始化二维数组 if data.size == 0: data = np.array([result]) else: # 按行追加结果,指定axis=0 data = np.append(data, [result], axis=0) print(data)
内容的提问来源于stack exchange,提问作者user14894283
相关产品推荐
相关产品推荐

