Pandas.read_csv读取具有可变长度字符串的文件时速度较慢

2024-09-27 19:27:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,我想我已经解决了,但我想了解更多关于它或学习更好的解决办法。在

问题是:我有一个标签分隔的文件,有大约600k行(和一个注释行),其中一个字段(共8个字段)包含一个可变长度的字符串,长度介于1到2000个字符之间。在

使用以下函数读取该文件的速度非常慢:

df = pd.read_csv(tgfile,
                 sep="\t",
                 comment='#',
                 header=None,
                 names=list_of_names)

但是,也许我不太关心大多数字符串(此字符串的字段名为“motif”),如果字符串太长,我可以使用以下命令截断它:

^{pr2}$

这一下子就快多了。在

所以我的问题是:

  1. 为什么读这个文件这么慢?这和分配内存有关吗?在
  2. 为什么转换器功能有帮助?它必须为每一行执行一个额外的函数,但仍然要快得多。。。在
  3. 还能做什么?在

Tags: 文件csv函数字符串dfreadnamescomment
1条回答
网友
1楼 · 发布于 2024-09-27 19:27:34
  1. 你没有提到慢对你来说意味着什么,但是如果:
    • 你的文件包含大约60万行
    • 每行包含1-2000个字符(假设平均1000个字符,因此每行大约有1000B个字符)

那么这个文件的大小是:600000*1000B~570MB。它是很多的,特别是如果你没有太多的内存。在

  1. 这很有帮助,因为突然间一条线的平均大小不是1000B,而是大约6-7B(考虑到新的max=8B)。系统不读取并保存整个字符串,但只检查其长度,并在需要时进行剪切。听起来很有逻辑!

  2. 在这种情况下,当需要加载大量数据时,最好使用

for chunk in pd.read_csv(tgfile, chunksize=10000): process(chunk)

chunksize参数表示有多少行包含一个块。这是很好的检查,如果它改善了你的情况下的表现!在

相关问题 更多 >

    热门问题