Python:读取大型.csv文件的最佳方法是什么?

Python:读取大型.csv文件的最佳方法是什么?,python,csv,pandas,io,Python,Csv,Pandas,Io,我必须阅读大约20MB的大型.csv。这些文件是由8列和5198行组成的表。我必须对特定的列I进行一些统计 我有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.65秒,我想知道是否

我必须阅读大约20MB的大型
.csv
。这些文件是由
8
列和
5198
行组成的表。我必须对特定的列
I
进行一些统计

我有
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.65秒,我想知道是否有最快的方法。

编辑:显然这是一个非常糟糕的方法!不要做我想做的事:/

我现在正在处理一个类似的问题,数据集大小大致相同。我使用的方法是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'])
在我的系统上,它总共运行了大约.1秒


这其中的一个问题是,任何非数字的值都被替换为
nan
,这可能不是您想要的

可以尝试在
pd.read\u csv
中指定
memory\u map=True
-如果数据完全是数字,则无需使用csv模块。你可以用split使用字典访问记录字段有一些小的开销。您可以改为在csv的标题上使用find,然后使用该索引从拆分记录中获取项目。但是第一行不是数字,是否可以使用
split
20MB
不是大文件<代码>20GB
是一个更大的文件。@furas:那是我的想法。除此之外,根据磁盘碎片的不同,读取20 MB文件所需的0.65秒可能接近磁盘的极限(我上次检查时,大多数旋转磁盘即使是连续数据也会达到100 MB/s以下的速度,因此在冷读时,读取时间至少为0.2秒,如果碎片化,则会更多,忽略所有处理成本)。编辑:看起来现在台式机硬盘的峰值接近150 MB/s,笔记本电脑硬盘的峰值在70-100 MB/s之间。即便如此,碎片化也可以轻松地将其减少10倍。考虑到这一点,而且它实际上不支持真正的CSV(分隔符
与包含引用、转义等内容的正确CSV不同),我不确定这会有什么帮助
read_csv
正确执行csv,并针对csv进行了优化,其中
genfromtxt
错误且通用(读取:可能比专用代码慢),因此
genfromtxt
是错误的选择。