当前位置:   article > 正文

DataFrame通过修改索引提升查找速度_dataframe 查询 加速

dataframe 查询 加速

下面以MovieLens-100K(可以在网上自己下载为例)来展示不同语法的查询效果。

  1. import os
  2. import pandas as pd
  3. import time
  4. import random
  5. data=[]
  6. with open(os.path.join('ml_data','u.data'),'r') as r_data:
  7. for line in r_data:
  8. data.append(line.split())
  9. data = pd.DataFrame(data,columns=['User_ID','Item_ID','Rating','Timestamp'])
  10. #要求取出每个user_id对每个item_id的timestamp字段
  11. #现将user_id和item_id保存成tuple对
  12. #原始数据共有100000行,这里只随机从中抽取10000个tuple对
  13. user_item=[(user,item) for user,item in data[['User_ID','Item_ID']].values]
  14. random.shuffle(user_item)
  15. #第一种写法
  16. start=time.time()
  17. for i in user_item[:5000]:
  18. date1=data[(data['User_ID']==i[0])&(data['Item_ID']==i[1])]['Timestamp']
  19. end=time.time()
  20. print("Method 1-total time: ",end-start)
  21. print("Method 2-average time: ",(end-start)/5000)
  22. #第二种写法
  23. user_item_data=data.set_index(['User_ID','Item_ID'])
  24. start=time.time()
  25. for i in user_item:
  26. date1=user_item_data.loc[i]['Timestamp']
  27. end=time.time()
  28. print("Method 2-total time: ",end-start)
  29. print("Method 2-average time: ",(end-start)/5000)

其代码运行结果如下:

 

方法1和方法2的区别在于查找方法的不同,方法1没查找一次需要把所有数据都扫描一遍。而方法2通过将要筛选的字段做成索引而大大提升了查询速度。在大批量数据下,这种方法非常有效。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/357267
推荐阅读
相关标签
  

闽ICP备14008679号