我需要从一个带有空格分隔值和取决于列数的行结构的大文件创建一个 Pandas DataFrame。
原始数据如下所示:
2008231.0 4891866.0 383842.0 2036693.0 4924388.0 375170.0
在一行或多行上,换行符被忽略。
如果列数为三,则最终结果如下所示:
[(u'2008231.0', u'4891866.0', u'383842.0'),
(u'2036693.0', u'4924388.0', u'375170.0')]
将文件拆分为行取决于文件元部分中规定的列数。
目前我将文件拆分为一个大列表并将其拆分为行:
def grouper(n, iterable, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
(代码来自 itertools 示例)
问题是,我最终在内存中有多个数据副本。对于 500MB 以上的文件,这会很快耗尽内存,而且 Pandas 在读取具有大型 MultiIndex 的大型列表时会遇到一些麻烦。
如何对此类数据使用 Pandas 文件读取功能(read_csv、read_table、read_fwf)?
或者有没有其他方法可以在没有辅助数据结构的情况下将数据读入 Pandas?