Python快速数据读入和切片
Posted
技术标签:
【中文标题】Python快速数据读入和切片【英文标题】:Python quick data read-in and slice 【发布时间】:2017-04-12 12:21:35 【问题描述】:我在 python 中有以下代码,我想我需要一些帮助来优化它。 我正在读取几百万行数据,但如果每行一个坐标不符合我的标准,则将它们中的大部分丢弃。 代码如下:
def loadFargoData(dataname, thlimit):
temp = np.loadtxt(dataname)
return temp[ np.abs(temp[:,1]) < thlimit ]
我已经将它编码为 C 类型代码,当然现在在 python 中这非常慢。 我可以以某种方式扔掉我的临时对象吗?或者 Pythonian 群体可以帮助我进行哪些其他优化?
【问题讨论】:
可能是这个问题的重复:***.com/questions/14645789/… @Zefick:感谢您的链接。确实,如果可以构建模仿数学运算(如 \ge...)的正则表达式,那将解决我的问题。这可能吗? 【参考方案1】:pandas 中包含的数据阅读器可能会加快您的脚本速度。它的读取速度比 numpy 快。 Pandas 将生成一个数据框对象,易于查看为 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 ]
您可能需要查看 Pandas 的文档以了解正确读取文件可能需要的函数参数(标题、分隔符等)。
【讨论】:
很抱歉迟到了你的回答,我正忙于另一个项目。 Pandas 阅读器实际上效果很好,我的数据速度提高了 15-16 倍。以上是关于Python快速数据读入和切片的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 python 3 对 h5py 中的键进行切片而不形成列表?