我有一个问题,我认为我已经解决了一些,但我想了解更多或了解更好的解决方案。
问题:我用制表符分隔的文件有约60万行(和一个注释行),其中一个字段(8个字段中的一个)包含一串可变长度的字符串,长度在1到〜2000个字符之间。
使用以下功能读取该文件非常慢:
df = pd.read_csv(tgfile,
sep="\t",
comment='#',
header=None,
names=list_of_names)
但是,也许我不太在乎大多数字符串(此字符串的字段名称为'motif'),如果使用时间过长,我可以将其截断
def truncate_motif(motif):
if len(motif) > 8:
return motif[:8] + '~'
else:
return motif
df = pd.read_csv(tgfile,
sep="\t",
comment='#',
header=None,
converters={'motif': truncate_motif},
names=list_of_names)
这突然快了很多。
所以我的问题是:
答案 0 :(得分:0)
然后此文件的大小是:600 000 * 1000B〜570 MB。很多,尤其是如果您没有太多的RAM内存。
这很有帮助,因为突然间,一条线的平均大小不是1000B,而是大约1000B。 6-7B(考虑新的最大值= 8B)。系统不会读取并保留整个字符串,而只会检查它们的长度并在需要时进行切割。对我来说听起来很合逻辑!
在这种情况下,当您必须加载大量数据时,最好使用块。
for chunk in pd.read_csv(tgfile, chunksize=10000):
process(chunk)
chunksize
参数表示多少行包含一个块。最好检查一下它是否可以改善您的情况!