Python 对条件语句使用列表

Python 对条件语句使用列表,python,numpy,Python,Numpy,我试图在Python数据文件中运行一列,只想在某一列中保留值为5、6、7、8或9的数据行 var = [5, 6, 7, 8, 9] import glob import numpy as np filname = glob.glob(''+fildir+'*') for k in filname: data = np.genfromtxt(k,skip_header=6,usecols=(2,3,4,5,8,9,10,11)) if data[:,1] not in var

我试图在Python数据文件中运行一列,只想在某一列中保留值为5、6、7、8或9的数据行

var = [5, 6, 7, 8, 9]

import glob
import numpy as np

filname = glob.glob(''+fildir+'*')
for k in filname:
    data = np.genfromtxt(k,skip_header=6,usecols=(2,3,4,5,8,9,10,11))
    if data[:,1] not in var:
        continue
“fildir”只是我所有文件所在的目录。数据[:,1]的值范围为1-15,就像我说的,我只想保留值为5-9的行。当我运行此代码时,我得到:

 ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

有什么有用的提示吗?

您的第一个问题是,您试图计算numPy数组的布尔值

if data[:,1] not in var:
在您的示例中,
data[:,1]
是从字段中读取为浮点的所有第二列值的集合。因此,暂时不考虑您的
usecols=
,一个包含

1 2 3 4 5 6 7 8
9 10 11 12 13 14 16
你的例子会产生什么影响

>> data[:,1]
array([2., 10.])
这不是你想要检查的。错误发生的确切原因有更深入的解释

如果您只想在第二列中存储一个包含
var
列表中值的所有行的列表,我建议使用一种简单的方法

from glob import glob
import numpy as np

var = [5, 6, 7, 8, 9]

filname = glob('fildir/*')

# get the desired rows from all files in folder
# use int as dtype because float is default
# I'm not an expert on numpy so I'll .tolist() the arrays
data = [np.genfromtxt(k, dtype=int, skip_header=6).tolist() for k in filname]

# flatten the list to have all the rows file agnostic
data = [x for sl in data for x in sl]

# filter the data and return all the desired rows
filtered_data = filter(lambda x: x[1] in var, data)

根据您希望保留行的数据结构,可能有一种更简单的方法来实现这一点,但这一种非常简单。

@MartijnPieters我尝试过,但它仍然没有给出我想要的结果。这就是我最终来到这里的原因。这可能会有所帮助:data[:,1]不是数组吗?所以问题可能是您将in用于数组而不是元素。b=false;对于数据[:,1]中的数据_i]:如果变量中的数据_i:b=true;如果不是b:继续;