【发布时间】:2020-04-14 02:40:14
【问题描述】:
我有几个大文件(每个文件 > 4 GB)。其中一些是固定宽度格式,一些是管道分隔的。这些文件既有数字数据又有文本数据。目前我正在使用以下方法:
df1 = pd.read_fwf(fwFileName, widths = [2, 3, 5, 2, 16],
names = columnNames, dtype = columnTypes,
skiprows = 1, engine = 'c',
keep_default_na = False)
df2 = pd.read_csv(pdFileName, sep = '|', names = columnNames,
dtype = columnTypes, useCols = colNumbers,
skiprows = 1, engine = 'c',
keep_default_na = False)
但是,这似乎比 R 的 read_fwf(来自 readr)和 fread(来自 data.table)慢。我可以使用其他一些方法来帮助加快读取这些文件的速度吗?
我正在使用具有多个内核的大型服务器,因此内存不是问题。我可以安全地将整个文件加载到内存中。也许在这种情况下它们是相同的,但我的目标是按时间而不是资源进行优化。
更新
根据迄今为止的 cmets,这里有一些关于数据和我的最终目标的额外细节。
- 这些文件被压缩(固定宽度为 zip,管道分隔为 gzip)。因此,我不确定像 Dask 这样的东西是否会增加加载的价值。他们会吗?
- 加载这些文件后,我计划将计算量大的函数应用于数据组。因此,我需要全部数据。尽管数据是按组排序的,即前 x 行是第 1 组,接下来的 y 行是第 2 组,依此类推。因此,即时组建小组可能更有效率?考虑到我不知道每个组预期有多少行,有没有一种有效的方法?
【问题讨论】:
-
你可以使用dask
标签: python pandas csv large-files fixed-width