【发布时间】:2017-04-15 02:50:09
【问题描述】:
我必须阅读大约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.65s,我想知道是否有最快的方法。
【问题讨论】:
-
也许尝试在
pd.read_csv中指定memory_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 倍。