NumPy循环追加数据出现初始零值及添加列名咨询
问题原因
你初始化new_table时使用np.zeros(shape=(4,1),dtype=object)预先创建了4行值为0的元素,后续np.append是在已有数组的尾部追加新内容,因此开头的4个初始零值会被保留。
去掉初始零值的实现方案
方案1:修正初始化参数
将初始数组的行数设为0,即可避免预置零值:
new_table = np.zeros(shape=(0,1), dtype=object) for i in y: # 自定义计算逻辑生成result new_table = np.append(new_table, np.array([result]), axis=0)
方案2:优先用列表收集结果再转数组(性能更优)
np.append每次执行都会复制全量数组生成新对象,循环次数较多时性能很差。更推荐先用普通Python列表收集所有结果,最后一次性转为numpy数组:
result_cache = [] for i in y: # 自定义计算逻辑生成result result_cache.append([result]) new_table = np.array(result_cache, dtype=object)
添加列名的实现方法
原生numpy无列名属性的普通数组不支持绑定列名,可根据需求选择以下两种方案:
方案1:使用numpy结构化数组(无需额外依赖)
从输出看每个result包含4个固定结构的元素,可以定义带字段名的结构化dtype,直接生成带列名的数组:
result_cache = [] for i in y: # 自定义计算逻辑生成result,格式为(标签, x值, y值, 指标值) result_cache.append(result) # 定义每个列的名称和对应数据类型 table_dtype = [ ('label', 'i4'), ('x_coord', 'f8'), ('y_coord', 'f8'), ('metric', 'f8') ] new_table = np.array(result_cache, dtype=table_dtype)
后续可直接通过列名索引数据,例如执行new_table['metric']即可提取所有指标列的值。
方案2:使用pandas DataFrame(适合表格类操作)
如果需要做更多筛选、统计类表格操作,可使用pandas生成带列名的表结构,需要时可随时转回numpy数组:
import pandas as pd result_cache = [] for i in y: # 自定义计算逻辑生成result result_cache.append(result) # 生成带列名的DataFrame df = pd.DataFrame( result_cache, columns=['label', 'x_coord', 'y_coord', 'metric'] # 按需传入自定义列名即可 ) # 如需转回numpy数组,调用df.values即可 new_table = df.values
内容的提问来源于stack exchange,提问作者user16454053
相关产品推荐
相关产品推荐

