Numpy如何根据某一列的条件提取另一列数据并避免使用循环
解决方法
使用Numpy原生的布尔索引就能完全绕过循环,实现你的需求,代码如下:
import numpy as np from numpy import genfromtxt df = genfromtxt('data.csv', delimiter=",") # 按第4列的条件筛选对应行的第0列数据 data1 = df[df[:, 4] == 0, 0] data2 = df[df[:, 4] == 1, 0] data3 = df[df[:, 4] == 2, 0] # 如果需要得到Python原生列表格式,可在末尾加.tolist() # 例:data1 = df[df[:, 4] == 0, 0].tolist()
原代码无法运行的原因
你代码里的data1 += df[i,0]写法错误:列表的+=操作要求右侧为可迭代对象,但df[i,0]是单个浮点数值,会直接触发类型错误。如果要让循环版本跑通,把+=改成append()方法即可:data1.append(df[i,0]),但循环写法远不如向量化布尔索引高效,尤其是数据量较大时性能差距非常明显。
内容的提问来源于stack exchange,提问作者Janek Nowak
相关产品推荐
相关产品推荐

