我是 Python 新手,对 pandas 也很陌生。
我想使用它,但是将两个列的熊猫过滤与字典列表(均为 80 行)进行比较,它似乎有巨大的性能差异。我最大的问题是为什么 pandas 需要这么长时间才能运行。
熊猫数据框
timeit a = dfEnts[(dfEnts["col"]=="ro") & (dfEnts["sty"]=="hz")]
1000 个循环,最好的 3 个:每个循环239 us
vs 简单的 dics 列表
timeit b = [ix for ix,ent in enumerate(ents) if (ent['col']=="ro") & (ent["sty"]=="hz")]
100000 次循环,最佳 3 次:每个循环11.4 us
vs numpy 结构化/记录数组
timeit a = entsRec[(entsRec["col"]=="ro") & (entsRec["sty"]=="hz")]
100000 次循环,3 次中的最佳:每个循环18.2 us
还有其他使用熊猫但响应时间相似的好方法吗?
脚本是这样的..
ents = []
for idx in xrange(0,80)
dic = {'n':f, 'p':props,'li':li,'col':col,'sty':sty,'nu':nu,'ge':ge,'rr':rr,'ssty':ssty}
ents.append(dic)
# DataFrame
dfEnts = pd.DataFrame(ents)
# np rec array
entsTuples = [(ent[ 'n'],ent['p'], ent[ 'li'],ent['col'], ent[ 'sty'], ent['nu'],ent['ge'],ent[ 'rr'], ent['ssty']) for ent in ents]
ents_dt = dtype([('n', 'O'), ('p', 'O'), ('li', 'i1'), ('col', 'O'), ('sty', 'O'), ('nu', 'i1'), ('ge', 'i1'), ('rr', 'i1'), ('ssty', '<i4')])
entsRec = np.array(entsTuples,ents_dt)
然后我计时。