У меня есть проблема, которую, я думаю, я несколько решил, но я хотел бы узнать о ней больше или узнать о лучших решениях.
Проблема: у меня есть файлы с разделителями табуляции с ~ 600k строками (и один комментарийстрока), одно из которых (из 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)
Это внезапно намного быстрее.
Итак, мои вопросы:
- Почему чтение этого файла происходит так медленно?Связано ли это с выделением памяти?
- Почему здесь помогает функция конвертера?Он должен выполнять дополнительную функцию для каждой строки, но все еще намного быстрее ...
- Что еще можно сделать?