当前位置:   article > 正文

python 提高文件搜索效率_提高python处理数据的效率方法

df 提高搜索效率

处理大数据的方法有很多,目前我知道就这么多,后面会持续更新:

一、将数据分批次读取

csv格式是常见的数据存储方式,对于我们普通人而言易于读写。此外,在pandas中有pd.read_csv()函数可以将csv形式的数据进行读取。但当csv文件非常大的时候,直接读取会很吃内存,甚至会出现内存不够用的情况。

这时候我们可以 分批次(分块)读取,而不是一次性读取 这么大体量的数据。操作步骤:

分批次读取

处理每一批次

保存每一批次的结果

对所有的数据重复步骤1-3

将所有的批次结果都结合起来

pd.read_csv(chunksize) 中的chunksize指的的是每一批次的行数

import pandas as pd

chunk_iterator = pd.read_csv("test.vcf",sep="\t", chunksize=10000)

chunk_result_list = []

#每一批次都是dataframe类型

for chunk in chunk_iterator:

#根据你的分析问题,设计自己的chunk_manipulate函数

filter_result = chunk_manipulate(chunk)

chunk_result_list.append(filter_result)

#合并所有批次处理结果,形成新的dataframe

df = pd.concat(chunk_result_list)

二、常用方法读取大型文件

面对100w行的大型数据,经过测试各种文件读取方式,得出结论:

with open(filename,"rb") as f:

for fLine in f:

pass

这种方式最快,100w行全遍历2.7秒。

基本满足中大型文件处理效率需求。如果rb改为r,慢6倍。但是此方式处理文件,fLine为bytes类型。但是python自行断行,仍旧能很好的以行为单位处理读取内容。

四、文本处理效率问题

这里举例ascii定长文件,因为这个也并不是分隔符文件,所以打算采用列表操作实现数据分割。但是问题是处理20w条数据,时间急剧上升到12s。本以为是byte.decode增加了时间。遂去除decode全程bytes处理。但是发现效率还是很差。

最后用最简单方式测试,首次运行,最简单方式也要7.5秒100w次。

那么关于python处理大文件的技巧,从网络整理三点:列表、文件属性、字典三个点来看看。

1.列表处理

def fun(x):尽量选择集合、字典数据类型,千万不要选择列表,列表的查询速度会超级慢,同样的,在已经使用集合或字典的情况下,不要再转化成列表进行操作,比如:

values_count = 0

# 不要用这种的

if values in dict.values():

values_count += 1

# 尽量用这种的

if keys,values in dict:

values_count += 1

后者的速度会比前者快好多好多。

2. 对于文件属性

如果遇到某个文件,其中有属性相同的,但又不能进行去重操作,没有办法使用集合或字典时,可以增加属性,比如将原数据重新映射出一列计数属性,让每一条属性具有唯一性,从而可以用字典或集合处理:

return '(' + str(x) + ', 1)'

list(map(fun,[1,2,3]))

使用map函数将多个相同属性增加不同项。

3. 对于字典

多使用iteritems()少使用items(),iteritems()返回迭代器:

>>> d = {'a':1,'b':2}

>>> for i in d.items() :

.... print i

('a',1)

('b',2)

>>> for k,v in d.iteritems() :

... print k,v

('a',1)

('b',2)

字典的items函数返回的是键值对的元组的列表,而iteritems使用的是键值对的generator,items当使用时会调用整个列表 iteritems当使用时只会调用值。

五、Datatable:性能碾压pandas的高效多线程数据处理库

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

闽ICP备14008679号