pandas 查询某行记录 速度优化!(速度提升10倍以上)

最近,为了提高数据量为200多万数据的查询速度,可是费了老大功夫。下面是一些实验,最后有总结。

前提说明:   你已经知道所找数据的 id(key),需要在dataframe中找到你需要的数据。

实验一:pandas 的 query方法 ,(fu_gongxu为一个 id数组,gongxu为dataframe。)

mubiao = gongxu.query('key == {}'.format(fu_gongxu))

运行时间:0.3142213821411133, 速度还行,但是100个 fu_gongxu 数组会等半小时的。

实验二:pandas 的 loc方法

mubiao = gongxu.loc[gongxu['key'].isin(fu_gongxu)]

运行时间:0.2902202606201172 ,速度提升一点

实验三:pandas的 at方法,

for i in fu_gongxu:
    mubiao.append('{} {} {} {} {}{}'.format(gongxu.at[int(i),'key'],

                           gongxu.at[int(i),'UNIT_CAPTION'],gongxu.at[int(i),'PRODUCT_TIME_START'],

                           gongxu.at[int(i),'MATERIAL_ID'],gongxu.at[int(i),'PRODUCT_ID'],gongxu.at[int(i),'CREW_OPT']))

运行时间:0.1611170768737793 ,速度快一倍。

实验四:pandas的 iat方法

gongxu.set_index('key',inplace=True)

for i in fu_gongxu:
    mubiao.append('{} {} {} {} {} {}'.format(gongxu.iat[int(i), 18], gongxu.iat[int(i), 1],
                                             gongxu.iat[int(i), 3], gongxu.iat[int(i), 4],
                                             gongxu.iat[int(i), 5], gongxu.iat[int(i), 16]))

运行时间:0.025017261505126953 ,快了10-20,(前提设置好index 后,再计算时间与处理)

 

总结

设置好index后,用iat查询,查询速度很快,可以忽略。我把前面的查询也用这种方式处理,最后运行时间:0.00099945068359375,速度提升300倍。以后不管是查询多少数据都可以很快给出。

有帮助的话,就点个赞支持一下!

你可能感兴趣的:(数据处理)