您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python 列表筛选数据详解

51自学网 2022-02-21 10:48:11
  python
这篇教程Python 列表筛选数据详解写得很实用,希望能帮到您。

在做数据处理中,常会遇到列表筛选,比如有以下两个列表:

根据上列表中的KEY1 , 筛选下列表的数据,也就是标黄的数据。数量不大的情况,一般就是遍历比较,逻辑简单,几行代码搞掂。

但如果列表达到万,或者百万、千万,那遍历效率就低了。

先构造测试的列表。

# 构造筛选目标列表,确保KEY不重复n1 = 30000n1_set = set([random.randint(1,n1)  for n in range(n1)])n1 = len(n1_set)list1 = [['1108{:0>6d}27'.format(n), "".join(random.sample('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',10))] for n in n1_set]# 构造待筛选数据列表,确保KEY不重复n2 = 100000n2_set = set([random.randint(1,n2)  for n in range(n2)])n2= len(n2_set)list2 = [['1108{:0>6d}27'.format(n), "".join(random.sample('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',5)),n ] for n in n2_set]

比较遍历、列表生成式+filter 、pandas 的 merge 三种方法效率。

筛选目标18971条, 待处理数据63275条遍历生成数据 耗时11.591秒 获得数据量 12024['11080000427', 'eArVD', 4]filter 耗时11.5秒 获得数据量 12024['11080000427', 'eArVD', 4]merge 耗时0.058秒 获得数据量 12024['11080000427', 'eArVD', 4]
筛选目标189733条, 待处理数据632363条遍历生成数据 耗时1597.4296秒 获得数据量 120180['1108000000227', 'NkoEQ', 2]filter 耗时1575.0432秒 获得数据量 120180['1108000000227', 'NkoEQ', 2]merge 耗时0.64秒 获得数据量 120180['1108000000227', 'NkoEQ', 2]

经过比较, 直接遍历生成和列表生成式+filter的效率基本一致, pandas 的merge 效率最高。适合大批量数据处理。

上代码

print("筛选目标{}条, 待处理数据{}条".format(n1,n2))# 直接遍历生成数据,计时t1 = time.time()list_temp = [n[0] for n in list1]list3 = []for n in list2:    if n[0] in list_temp:        list3.append(n)t2 = time.time()print("遍历生成数据 耗时{}秒".format(round(t2 - t1, 4)), "获得数据量", len(list3))print(list3[0])# 用filter筛选数据,计时t1 = time.time()list_temp = [n[0] for n in list1]list3 = [n for n in filter(lambda x: x[0] in list_temp, list2)]t2 = time.time()print("filter 耗时{}秒".format(round(t2 - t1,4)), "获得数据量", len(list3))print(list3[0])# 用pd.merge 筛选数据,计时t1 = time.time()df1 = pd.DataFrame(list1, columns=['k1','m1'])df2 = pd.DataFrame(list2, columns=['k1','m2','n2'])df3 = pd.merge(df1[['k1']], df2, how='inner', on='k1')t2 = time.time()print("merge 耗时{}秒".format(round(t2 - t1,4)), "获得数据量", len(df3))print(list(df3.iloc[0]))

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注51zixue.net的更多内容!


Python手机与电脑游戏脚本的编写方法
Python 选择排序中的树形选择排序
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。