【发布时间】:2013-02-01 00:58:45
【问题描述】:
我希望能够通过 Python 在给定两个或多个参数的情况下检索大型数据集(9M 行,1.4 GB)中的特定行。
例如,来自这个数据集:
ID1 2 10 2 2 1 2 2 2 2 2 1
ID2 10 12 2 2 2 2 2 2 2 1 2
ID3 2 22 0 1 0 0 0 0 0 1 2
ID4 14 45 0 0 0 0 1 0 0 1 1
ID5 2 8 1 1 1 1 1 1 1 1 2
给定示例参数:
- 第二列必须等于 2,并且
- 第三列必须在一个 范围从 4 到 15
我应该得到:
ID1 2 10 2 2 1 2 2 2 2 2 1
ID5 2 8 1 1 1 1 1 1 1 1 2
问题是我不知道如何在 Python 中有效地对二维数组进行这些操作。
这是我尝试过的:
line_list = []
# Loading of the whole file in memory
for line in file:
line_list.append(line)
# set conditions
i = 2
start_range = 4
end_range = 15
# Iteration through the loaded list and split for each column
for index in data_list:
data = index.strip().split()
# now test if the current line matches with conditions
if(data[1] == i and data[2] >= start_range and data[2] <= end_range):
print str(data)
我想多次执行这个过程,但我这样做的方式真的很慢,即使数据文件加载到内存中也是如此。
我正在考虑使用 numpy 数组,但我不知道如何在给定条件下检索行。
感谢您的帮助!
更新:
按照建议,我使用了关系数据库系统。 我选择了 Sqlite3,因为它非常易于使用且部署迅速。
我的文件通过 sqlite3 中的导入函数在大约 4 分钟内加载完毕。
我在第二列和第三列做了索引,以加快检索信息的过程。
查询是通过 Python 完成的,使用模块“sqlite3”。
这样,更快!
【问题讨论】:
-
你考虑过使用数据库吗?
-
这看起来像是关系数据库的工作。
-
好点,我没想到。当我在集群上工作时,我仍然可以拆分文件进行处理。我只是想确定它不能在纯 Python 中有效地完成。