Как запросить большой файл с помощью панд (или альтернативы)?Python

Программы на Python
Anonymous
Как запросить большой файл с помощью панд (или альтернативы)?

Сообщение Anonymous »

Я хочу запросить большой файл, созданный из dbSNP VCF (16 ГБ), с помощью этой команды оболочки:

Код: Выделить всё

gzcat 00-All.vcf.gz | grep -v ## | awk -v FS='\t' -v OFS='\t' '{print $3, $1, $2, $4, $4}' | gzip > 00-All_relevant.vcf.gz
Из этого 00-All_relevant.vcf.gz я хочу запросить несколько идентификаторов rsID (идентификатор столбца в MRE) и получить соответствующее геномное местоположение и изменить его (столбцы #CHROM, ПОС, ССЫЛКА, АЛЬТ). Я использую панд для своего проекта, поэтому я тоже начал с них. Однако я открыт для других вариантов, совместимых с Python.
Я не могу прочитать весь файл сразу, так как мое ядро ​​всегда дает сбой при использовании этой команды:

Код: Выделить всё

import pandas as pd

rsid_df = pd.read_csv('00-All_relevant.vcf.gz',
sep='\t')
Вот почему я попробовал читать его по частям, и после реализации решения user27243451 я придумал следующее решение:

Код: Выделить всё

rsid_df = pd.read_csv('00-All_relevant.vcf.gz',
sep='\t',
chunksize=1000000)

rsids = ['rs537152180','rs376204250','rs181326522']
variants = pd.DataFrame()

for data in rsid_df:
rsid_found = data['ID'].isin(rsids)
if rsid_found.astype(int).sum() > 0:
variant = data.loc[rsid_found]
variants = pd.concat([variants,variant])
for id in variant['ID'].tolist():
rsids.remove(id)
if not rsids:
break

print(variants)
Это работает, но ужасно медленно, особенно если один из rsID находится в последнем фрагменте. Есть ли способ ускорить это?

Подробнее здесь: https://stackoverflow.com/questions/790 ... lternative

Вернуться в «Python»