前言

在Excel进行表表运算时,特别是以某表文本字段为关键字,查询另一表文本,即进行vlookup操作时,经常出现两边数据的不匹配。特别是如果数据量足够大,将产生较多的问题。

上述操作实际上是两集合的运算问题。解决办法有很多,就Pandas中,就可以以merge功能处理。但本文用Pandas的Index集合操作,可以更好理解Pandas的高效功能。

1、实验数据

import pandas as pd
a = ['王三','王五','刘一','刘八','林二']
b = ['王六','王五','刘三','刘八','林四','刘一']A1 = pd.Index(a)
B1 = pd.Index(b)

以上把两列文本转换为pandas的Index数据类型,便于进行集合处理

2、基本集合运算

请原谅本人无耻地引用了初中的集合图示来说明这个问题

Shared = A1 & B1 # 求两个集合交集,一个新的pd.Index对象
#output: Index(['王五', '刘一', '刘八'], dtype='object')
Total = A1 | B1 # 求两个集合并集,也是唯一
#output: Index(['刘一', '刘三', '刘八', '林二', '林四', '王三', '王五', '王六'], dtype='object')
notSharedTotal = A1 ^ B1 # 两个集合的异或,即合集中剔除交集部分
#oupput: Index(['刘三', '林二', '林四', '王三', '王六'], dtype='object')unSharedA = A1 ^ Shared
# Index(['林二', '王三'], dtype='object')
unSharedB = B1 ^ Shared
# Index(['刘三', '林四', '王六'], dtype='object')

3、输出运算结果

print("(1)a与b共有:" + ",".join(list(Shared)) + ";<br>(2)a存在,但b不存在:" + ",".join(list(unSharedA)) + ";<br>(3)b存在,但a不存在:" + ",".join(list(unSharedB)) )

(1)a与b共有:王五,刘一,刘八;
(2)a存在,但b不存在:林二,王三;
(3)b存在,但a不存在:刘三,林四,王六

4、效率测试

我们模拟两条百万级别数据,进行比对,看看需要的时间,以此证明在实际中是否足够高效率。

import random
import timexing = [
'赵', '钱', '孙', '李', '周', '吴', '郑', '王', '冯', '陈', '褚', '卫', '蒋', '沈', '韩', '杨', '朱', '秦', '尤', '许',
'何', '吕', '施', '张', '孔', '曹', '严', '华', '金', '魏', '陶', '姜', '戚', '谢', '邹', '喻', '柏', '水', '窦', '章',
'云', '苏', '潘', '葛', '奚', '范', '彭', '郎', '鲁', '韦', '昌', '马', '苗', '凤', '花', '方', '俞', '任', '袁', '柳',
'酆', '鲍', '史', '唐', '费', '廉', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常',
'乐', '于', '时', '傅', '皮', '卞', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹',
'姚', '邵', '堪', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '臧', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞',
'熊', '纪', '舒', '屈', '项', '祝', '董', '梁']
rNames1 = [xing[random.randint(0,len(xing)-1)]+str(random.randint(1,100000)) for x in range(1,1000000)]
rNames2 = [xing[random.randint(0,len(xing)-1)]+str(random.randint(1,100000)) for x in range(1,1000000)]
# 计时开始
startTime = time.time()
print(pd.Index(rNames1) & pd.Index(rNames2))
endTime = time.time()
# 计时结束
print('累计耗时' + str(round(endTime-startTime,2)) + '秒' )

Index([‘卜67433’, ‘康68047’, ‘秦47228’, ‘常16423’, ‘殷65482’, ‘计66086’, ‘孙20772’,
‘滕76294’, ‘云10288’, ‘云10288’,

‘姜62557’, ‘梁50931’, ‘滕51296’, ‘潘16540’, ‘周41513’, ‘祝56669’, ‘费58973’,
‘水96493’, ‘常91411’, ‘陶8377’],
dtype=‘object’, length=75349)
累计耗时1.86秒

在两列数量级在百万级时,耗时是4.97秒。如果数量级在十万级时,耗时是0.1-0.2秒。50万级别时,在1.5秒左右。这么看,pandas Index是效率很高的工具。

EverYang 于 2021/3/21

用Pandas Index高效比对百万级别文本相关推荐

  1. 如何把百万级别的订单根据金额排序

    前面介绍了一些经典排序算法,它们的时间复杂度最好是 O(nlogn),那 如何把百万级别的订单根据金额排序 是不是觉得可以按照之前学的归并排序.快速排序实现?功能是可以完成,但是效率太低了.今天「码哥 ...

  2. easyexcel导出百万级数据_百万级别数据Excel导出优化

    这篇文章不是标题党,下文会通过一个仿真例子分析如何优化百万级别数据Excel导出. 笔者负责维护的一个数据查询和数据导出服务是一个相对远古的单点应用,在上一次云迁移之后扩展为双节点部署,但是发现了服务 ...

  3. epoll哪些触发模式_epoll的内部实现 百万级别句柄监听 lt和et模式非常好的解释...

    epoll是Linux高效网络的基础,比如event poll(例如nodejs),是使用libev,而libev的底层就是epoll(只不过不同的平台可能用epoll,可能用kqueue). epo ...

  4. python memory usage_Python Pandas Index.memory_usage()用法及代码示例

    Python是进行数据分析的一种出色语言,主要是因为以数据为中心的python软件包具有奇妙的生态系统. Pandas是其中的一种,使导入和分析数据更加容易. Pandas Index.memory_ ...

  5. JAVA使用POI如何导出百万级别数据

    用过POI的人都知道,在POI以前的版本中并不支持大数据量的处理,如果数据量过多还会常报OOM错误,这时候调整JVM的配置参数也不是一个好对策(注:jdk在32位系统中支持的内存不能超过2个G,而在6 ...

  6. Pandas index详解

    总括 pandas里对索引的操作主要有 DataFrame.rename DataFrame.rename_axis DataFrame.reindex DataFrame.reindex_axis ...

  7. 多路复用实现单服百万级别RPS吞吐

    多路复用其实并不是什么新技术,它的作用是在一个通讯连接的基础上可以同时进行多个请求响应处理.对于网络通讯来其实不存在这一说法,因为网络层面只负责数据传输:由于上层应用协议的制订问题,导致了很多传统服务 ...

  8. 基于百万级别的站内信设计

    基本上现在的网站都会有站内信功能,主要分为少量(10-999用户),中量(1000-99999用户),大量(100W用户)不同的站内信架构,消耗存储空间,和效率也是不同的.这次要设计的是基于百万级别的 ...

  9. mysql 去重主表数据,两张表结构相同数据(百万级别)

    这里写自定义目录标题 mysql 去重主表数据,两张表结构相同数据(百万级别) 得到两张表的并集,查出主表在并集中出现的主键id 删除主表中重复的id,根据上面sql查出的数据 2.一部删除到位 my ...

最新文章

  1. 对分组交换(packet switching)高效迅速灵活可靠四个优点的理解
  2. 200字带你看完一本书,GPT-3已经会给长篇小说写摘要了
  3. 怎么修改存储路径_修改桌面文件默认存储位置的正确方式及注意事项
  4. mysql错误消息1_MySQL出错信息: Subquery returns more than 1 row及其解决方法
  5. 怎么一键排版_做了这么久的PPT!终于找到可以自动排版的插件了
  6. 都说雪花ID不能做MySQL的主键,你确定?
  7. opencv 车辆识别_丽水专业人脸自动识别系统网
  8. 如何录制回放测试用例并且添加检查点?
  9. VirtuoZo数字摄影测量(二)——模型定向与核线影像生成
  10. 下划线_Excel添加下划线的快捷键,下划线颜色设置
  11. 2017博鳌新型城镇化发展大会,机智云斩获2017中国智慧城市生态圈杰出企业、智慧城市创新应用双料大奖
  12. nginx配置-优化静态资源
  13. python并行编程 - 介绍篇
  14. 游戏程序必备spyder程序--可进可退的多级菜单系统
  15. CSP 202203-2出行计划
  16. python 查询周数 week number
  17. 支付宝小程序(支付)
  18. GIS的核心价值——服务
  19. 宝宝树发行价为6.8港元 王怀南:上市不是为高估值
  20. 基于stm32单片机电子秤设计

热门文章

  1. 中国社科发布:十大调查研究咨询公司助就软实力
  2. 1.1.初识JAVA
  3. 2000+停车场高精度地图数据,这家图商拿下首个合资品牌量产
  4. 动态SQL_foreach
  5. php信用卡卡号验证函数
  6. matlab图像处理关于细胞计数
  7. 计算机专业对联横批,学校对联大全带横批
  8. mongodb和MySql的一些等价查询语句,方便大家映照学习
  9. 【DB笔试面试611】在Oracle中,什么是结果集缓存?
  10. cesium中实现楼层分解动画