Быстрый способ получить информацию из огромного CSV-файла в Python по столбцу и имени строки - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь найти быстрый и эффективный способ извлечения определенных точек данных из табличного файла, который выглядит примерно так:

chrom:pos   04a0    7ee8    88ca    477a
chr1:925745 3   1   5   1
chr1:925746 3   1   5   1
chr1:925747 4   1   8   1
chr1:925749 4   1   5   1

В этой таблице имена строк, а также столбецимена уникальны.Исходный файл имеет размер 7 ГБ.Он не меняется, поэтому я мог бы также преобразовать его в другой формат, если это ускорит процесс.Может быть, есть способ сгенерировать индекс заранее?

Я бы хотел получить целое число 8, просто указав имя интересующего меня столбца и строки, например, используя функциюfunc("chr1:925747", "88ca").

До сих пор я пытался использовать pandas для подмножества моего огромного файла (всего 330 МБ), и для получения информации требуется> 30 секунд, что слишком медленно для моегопрецедент.

Мой код панд:

import pandas as pd
import sys

inputfile = sys.argv[1]
chrompos = sys.argv[2]
id = sys.argv[3]


data=pd.read_csv(inputfile, sep="\t", index_col=0)
result=data.at[chrompos, id]
print result

Может быть, использование таблицы SQL поможет ...?Я сгенерировал таблицу sql из фрейма данных pandas, используя «.to_sql», но затем мои заголовки столбцов теряются.

1 Ответ

0 голосов
/ 06 мая 2019

вы можете использовать datatable, который быстрее считывает данные, чем панды, но в datatable есть не все функции, доступные в pandas

import datatable as dt
dt_df = dt.fread("../input/loan.csv")

, но после чтения вы можете преобразовать его в панд

   dt_df.to_pandas()
...