通过列和行名从python中的巨大csv文件中检索信息的快速方法

时间:2019-05-06 11:43:52

标签: python pandas tabular

我正在尝试寻找一种快速且节省内存的方法,以从类似于此的表格文件中检索特定的数据点:

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

在此表中,行名和列名都是唯一的。原始文件的大小为7GB。它不会更改,因此,如果可以加快处理速度,我也可以将其转换为其他格式。 也许有一种方法可以预先生成索引?

我希望能够仅通过指定我感兴趣的列和行的名称来检索整数8。使用函数func("chr1:925747", "88ca")

到目前为止,我已经尝试在庞大文件的一部分(仅330 MB)上使用pandas,并且检索信息需要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表帮助吗?我使用“ .to_sql”从pandas数据帧生成了一个sql表,但是随后我的列标题丢失了。

1 个答案:

答案 0 :(得分:0)

您可以使用数据表,该数据表的读取速度比熊猫快,但数据表中并没有所有功能都可以在熊猫中使用

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

但是阅读后您可以将其转换为熊猫

   dt_df.to_pandas()