2016-11-30 111 views
1

我得看大约20MB.csv。这些文件是由8列和5198行组成的表格。我必须对特定列I做一些统计。Python:这是读取大型.csv文件的最佳方式?

我有n不同的文件,这我在做什么:

stat = np.arange(n) 
    I = 0 
    for k in stat: 
     df = pd.read_csv(pathS+'run_TestRandom_%d.csv'%k, sep=' ') 
     I+=df['I'] 
    I = I/k ## Average 

这个过程需要0.65s,我不知道是否有一个最快的方法。

+0

也许尝试在'pd.read_csv'中指定'memory_map = True' –

+0

- 如果数据是专有数字,那么就不需要使用** csv **模块。你可以使用** split **。 - 使用字典访问记录字段有一些小开销。您可以改为在csv头部使用** find **,然后使用该索引从分割记录中获取项目。 –

+0

第一行不是数字,但是可以使用'split'吗? – emax

回答

-2

编辑:显然这是一个非常糟糕的方式来做到这一点!不要做什么,我做了我想:/

我工作的一个类似的问题,现在有差不多大的数据集。我使用的方法是numpy的的genfromtxt

import numpy as np 

ary2d = np.genfromtxt('yourfile.csv', delimiter=',', skip_header=1, 
    skip_footer=0, names=['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8']) 

在我的系统是时间约在.1sec总

的一个问题,这是即非数字的任意值可以简单地通过nan取代这可能不是你想要的

+0

鉴于['genfromtxt'比'read_csv'](http://stackoverflow.com/q/21486963/364696)慢,并且它实际上不支持真正的CSV(','的分隔符不一样包括引用,转义等的正确的CSV),我不知道这将如何帮助。 'read_csv'正确地执行了CSV,并针对CSV进行了优化,其中'genfromtxt'错误且通用(读取:可能比专用代码慢),所以'genfromtxt'是错误的路径。 – ShadowRanger

相关问题