所以我有一个相当大的数据集,看起来像这样:
data=[['O', '3C-1', '100', '100', '67.848600000000005', '0.00021722920782039196', '3.4565635', '1.3', '0.7', '0.38673693', '0.618034', '30.0', '-2.0097724299999977'],
['I', '1C-2', '150', '150', '101.77200000000001', '9.6548022169817182e-05', '3.46454077', '1.3', '0.7', '-1.77373911', '-1.70838786', '30.0', '-1.8860072499999994'],
['O', '3C-2', '250', '250', '169.62', '3.4757287981134192e-05', '3.48710222', '1.3', '0.7', '-6.81997504', '-3.94866255', '30.0', '-1.5686071800000005'],
['O', '3C-2', '500', '500', '339.23899999999998', '8.6893732236788835e-06', '3.23954068', '1.3', '0.7', '19.05924395', '2.15260466', '30.0', '-1.0255009299999993']]
然后我有一个看起来像这样的定义:
def mdata(a=None,b=None,c=None,d=None):
filt=[]
for num,a in enumerate([a,b,c,d]):
if a==None: continue
filt.append([a,num])
data=creader(open(stuff.csv'))
for a,num in filt:
data=[x for x in data if a in x[num]]
for a in data: print a
a,b,c,d 处理数据集的前四列。因此,如果我调用 mdata() 它会返回整个数据集,但如果指定 data(a='O') 它只会返回第一列有 O 的数据。
除了列 c 和 d 之外,这工作正常,因为它们应该是整数。例如,如果我指定 mdata(c='10'),我将获得第三列包含 10 的所有数据集(100、5103 等)。我可以在这里设置一个条件来有条件地搜索字符串或将有问题的数据转换为 int,但我无法使条件正确,而且这似乎也是一种非常糟糕的方法。如何改进?