仅使用numpy加载符合某些条件的行

时间:2016-03-02 02:12:55

标签: python python-2.7 numpy

提前感谢您的帮助。

我对python比较新,我正在尝试编写一个python脚本来加载1000个文件中的部分csv文件。例如,我有1000个具有此格式的文件

x,y
1,2
2,4
2,2
3,9
...

我只想加载行,例如x=2。我在这里看到很多关于挑选某些线条的帖子(即第1,2,3行),但没有选择符合某些标准的线条。一种解决方案是简单地单独打开每个文件并遍历每个文件,按照我的方式加载行。但是,我认为有一种更好的方法可以做到这一点(因为这些文件不小,效率有点令人担忧)。

可能加速的一点是x列被排序,即一旦我看到值x = a,我将永远不会看到另一个x值小于a,因为我从头开始迭代这些行。

是否有更有效的方法来执行此操作而不是逐行浏览每个文件?

编辑: 我采取的一种方法是

numpy.fromregex(file, r'^' + re.compile(str(mynum)) + r'\,\-\d$', dtype='f');

其中mynum是我想要的号码,但这不起作用

2 个答案:

答案 0 :(得分:1)

试试pandas库。它具有numpy的互操作性和更灵活的方式。有了这个库,你可以做下一件事:

data = pandas.read_csv('file.csv')
# keep only rows with x equals to 2
data = data[data['x'] == 2]
# convert to numpy array 
arr = numpy.asarray(data)

您可以阅读有关使用here选择数据的详情。

答案 1 :(得分:0)

csv库附带python,它允许部分读取文件。

import csv

def partial_load(filename):
    ds = []
    c = csv.reader( open(filename) )
    legend = next( c )
    for row in c:
        row = [float(r) for r in row]
        if len(row) > 0:
            if row[0] > 2:
                break
            ds.append(row)
    return ds