python - 按列名和行名从python中的巨大csv文件中检索信息的快速方法
问题描述
我正在尝试找到一种快速且内存高效的方法来从类似于此的表格文件中检索特定数据点:
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")
。
到目前为止,我已经尝试pandas
在我的大文件的一个子集(仅 330 MB)上使用,检索信息需要 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 表帮助..?我使用“”从 pandas 数据框生成了一个 sql 表.to_sql
,但是我的列标题丢失了。
解决方案
您可以使用数据表,它比熊猫读取数据的速度更快,但数据表中并非所有功能都可以在熊猫中使用
import datatable as dt
dt_df = dt.fread("../input/loan.csv")
但读完后你可以把它转换成熊猫
dt_df.to_pandas()