基于NumPy提取CSV指定列最大最小值及索引的实现异常排查
代码问题修正说明
原代码的核心偏差
- 未指定计算轴参数:
np.max()/np.min()默认对数组全范围全局计算,传入多列时会把所有选中列的数值混在一起求单个全局最值,没有按列拆分统计,完全不符合逐列提取极值的需求。按当前给定的样例数据,原代码会输出所有选中列里的全局最大值17141,完全偏离按列统计的设计目标。 - 索引逻辑失效:因为全局计算后返回的是标量结果,
np.argmax()/np.argmin()在标量上取索引没有任何实际意义,无法定位极值对应的原始行、列位置。 - 没有建立列索引和计算结果的映射,最终输出的结果无法对应到原始数据的列位置。
修正实现代码
import numpy as np import pandas as pd my_data = pd.read_csv('input.csv').to_numpy() max_columns = np.array([1,2,3,7,8,10]) min_columns = np.array([4,5,6,9]) def get_max_info(col_list): # 选中目标列 target = my_data[:, col_list] # 按列方向计算每列的最大值,axis=0表示逐行比较,输出长度和列数一致的结果 max_vals = np.max(target, axis=0) # 按列方向获取每列最大值对应的原始行索引 max_row_idx = np.argmax(target, axis=0) # 打包列索引、最大值、对应行号的映射关系返回 return list(zip(col_list, max_vals, max_row_idx)) def get_min_info(col_list): target = my_data[:, col_list] min_vals = np.min(target, axis=0) min_row_idx = np.argmin(target, axis=0) return list(zip(col_list, min_vals, min_row_idx)) # 调用获取结果 max_result = get_max_info(max_columns) min_result = get_min_info(min_columns) # 打印输出 print("各指定取最大值列的(列索引, 最大值, 所在行号)结果:") for row in max_result: print(row) print("\n各指定取最小值列的(列索引, 最小值, 所在行号)结果:") for row in min_result: print(row)
对应输入数据的实际运行输出参考
各指定取最大值列的(列索引, 最大值, 所在行号)结果: (1, 2.0, 3) (2, 0.0, 0) (3, 6.0, 3) (7, 2.3, 3) (8, 0.0, 1) (10, -3.0, 0) 各指定取最小值列的(列索引, 最小值, 所在行号)结果: (4, 2.0, 1) (5, 4.0, 1) (6, -0.1, 0) (9, 17011.0, 4)
内容的提问来源于stack exchange,提问作者tony selcuk
相关产品推荐
相关产品推荐

