2017-04-12 113 views
0

我在python中得到了以下代码,我想我需要一些优化它的帮助。
我正在阅读数百万行数据,但如果每行一个坐标不符合我的标准,那么会抛出大部分数据。
的代码如下:Python快速数据读入和切片

def loadFargoData(dataname, thlimit): 
    temp = np.loadtxt(dataname) 
    return temp[ np.abs(temp[:,1]) < thlimit ] 

我编写它,仿佛它是C型代码,当然在蟒蛇现在这是疯狂缓慢。
我可以以某种方式抛出我的临时对象吗?或者Python的人可以帮助我进行哪些其他优化?

+0

可能是这个问题的重复:http://stackoverflow.com/questions/14645789/numpy-reading-file-with-filtering-lines-on-the-fly – Zefick

+0

@Zefick:感谢您的链接。事实上,如果可以构建像\ ge这样的数学运算的正则表达式,那么这将解决我的问题。那有可能吗? – AtmosphericPrisonEscape

回答

1

包含在熊猫中的数据读取器可能会加速您的脚本。它读取比numpy更快。熊猫将产生一个数据框对象,易于查看作为一个numpy数组(也很容易转换,如果首选的话),所以你可以在numpy中执行你的条件(在你的问题中看起来足够有效)。

import pandas as pd 

def loadFargoData(dataname, thlimit): 
    temp = pd.read_csv(dataname) # returns a dataframe 
    temp = temp.values   # returns a numpy array 
    # the 2 lines above can be replaced by temp = pd.read_csv(dataname).values 
    return temp[ np.abs(temp[:,1]) < thlimit ] 

你可能要检查了大熊猫文件,了解您可能需要正确地读取文件(头,分离器等)函数的参数。

+0

对于迟到接受你的回答感到抱歉,我忙于另一个项目。实际上,熊猫读者的作品非常棒,我的数据提高了15-16倍。 – AtmosphericPrisonEscape