分享

Pandas处理百万条csv或excel数据,提高效率np.where用法

 hdzgx 2019-12-27

问题:需要对200万条csv数据进行清洗判断,考虑到在hive中不好操作循环,数据是从hive上下载下来的,然后考虑用python解决:

数据处理需要先对行数做判断,然后根据该行某一列的数据值跟200作比较再判断取值,涉及到后面的值会取到前面一行的值。

原来程序是这样:

  1. for i in data1.index:
  2. if i % 9 == 0:
  3. data1['wo_new'].loc[i] = data1['wo_id'].loc[i] if data1['dis1'].loc[i] >= 200 else data1['wo_new'].loc[i]
  4. else:
  5. data1['wo_new'].loc[i] = data1['wo_id'].loc[i] if data1['dis1'].loc[i] >= 200 else data1['wo_new'].loc[i-1]

结果处理200万左右的数据量非常卡,程序运行了一下午也没有跑出来,对于这样的百万数据,循环遍历是非常耗时的,后来询问大神得知可以考虑使用np.where,用了np.where嵌套,终于解决了这个问题:

  1. for i in range(0,9):
  2. data1['wo_new']=np.where((data1['dis1']>= 200)&(data1.index%9==0),data1['wo_id'],np.where((data1['dis1']<200)&
  3. (data1.index%9==0),data1['wo_new'],np.where((data1['dis1']>= 200)&(data1.index%9!=0) ,data1['wo_id'], data1['wo_new'])))
  4. data1['wo_new']=data1['wo_new'].shift(1)

程序处理200万条数据只需要耗时5分钟,效率非常快,以后在处理csv或excel文件,可以多使用np.where,在此分享给大家,欢迎交流!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多