我对Python是新认识的,对熊猫也不仅仅是新手。在
我想用它,但是比较pandas过滤两个col和一个字典列表(共80行),它似乎有一个巨大的性能差异。我最大的问题是为什么熊猫跑得这么久。在
熊猫数据帧
timeit a = dfEnts[(dfEnts["col"]=="ro") & (dfEnts["sty"]=="hz")]
1000个循环,最多3个:239 us每个循环
vs简单DIC列表
^{pr2}$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)
然后我计时。在
当您处理小数据集时,这个列表可能有一点性能上的好处,因为在Python中,列表的理解和字典查找是非常优化的。但这通常是微不足道的区别。一旦你尝试使用更大的数据集,你会发现一个更大的差异,并开始感受到熊猫库提供的好处。在
此外,pandas
DataFrame
提供了比dict列表多得多的功能,因此我认为它们甚至没有可比性。在相关问题 更多 >
编程相关推荐