纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Python 列表筛选数据 Python 列表筛选数据详解

陈年椰子   2021-11-18 我要评论
想了解Python 列表筛选数据详解的相关内容吗陈年椰子在本文为您仔细讲解Python 列表筛选数据的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Python,列表,Python筛选数据下面大家一起来学习吧

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

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

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

先构造测试的列表

# 构造筛选目标列表,确保KEY不重复
n1 = 30000
n1_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 = 100000
n2_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]))

总结

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


相关文章

猜您喜欢

  • Python 树形选择排序 Python 选择排序中的树形选择排序

    想了解Python 选择排序中的树形选择排序的相关内容吗李欣容在本文为您仔细讲解Python 树形选择排序的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Python,选择排序,Python,树形选择排序下面大家一起来学习吧..
  • Go语言第一个程序的解读 GO语言基础入门第一个go程序解读

    想了解GO语言基础入门第一个go程序解读的相关内容吗枫少文在本文为您仔细讲解Go语言第一个程序的解读的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Go语言入门,Go语言第一个程序下面大家一起来学习吧..

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式