【问题标题】:"big" Data csv search from 2 files来自 2 个文件的“大”数据 csv 搜索
【发布时间】:2015-04-28 16:42:52
【问题描述】:

我有一个计算问题。

我正在使用 python 来迭代 2 个 csv 文件。

csv file1= 包含 (6-7) 列.. 重要的列是来自 dbSNP 的“rs ID”列。

csv file2= 3 列,其中 2 列很重要,还有 rs ID 和一个 GENE 符号列

我的问题:

现在我想搜索:来自 csv 文件 1 IN csv 2 的 rs ID 吗?如果是,则从 csv 文件 2 中取出基因符号并将其放入匹配发生的 csv 文件 1 中(位置“x”,例如第 4512451 行)。

csv 文件 1 = 1.3 gb,csv 文件 2 = 8.8 mb

我在 python 中从 csv 文件 2 生成一个字典,我用它在 csv 文件 1 中搜索。

问题:对于 csv 文件 1 中的每一行(rs ID),他遍历整个字典(8.8mb 文件)

这需要很多时间....您知道另一种加快搜索速度的方法吗?我认为字典/哈希表会很好......但它会变慢。

也许从 csv 文件 2 创建一个后缀数组而不是使用字典?

或者python中是否有一些包,其他数据结构(向量化方法)?

非常感谢您的帮助!

【问题讨论】:

  • 我建议查看pandas 它支持非常快速地加载 csv 数据、索引和值查找以及从满足条件的另一个数据帧中插入值,在这个阶段你的问题有点广义的,我认为你应该看看 pandas 尝试一些事情,当你卡住时回来
  • 如果我读取我的 csv 文件: tp = read_csv('endParsedNOgene.csv', iterator=True, chunksize=10000) # 给出 TextFileReader,它可以迭代 1000 行的块。 df = concat(tp, ignore_index=True) 进程被杀死

标签: python csv bigdata


【解决方案1】:

您是否尝试过将这两个 CSV 文件读入内存? 1.3 GB 似乎仍然可以管理。您可以将这两个 CSV 文件放入更适合您的问题的数据结构中。

如果您选择这样做,我建议您使用 pandas DataFrames 作为容器。他们可以be directly constructed from CSV files。使用isin 可以很快地执行您的搜索。

【讨论】:

  • 不,进程被杀死了,所以我似乎无法将整个文件加载到内存中 tp = read_csv('endParsedNOgene.csv', iterator=True, chunksize=10000) # 给出 TextFileReader,这是可迭代的 1000 行的块。 df = concat(tp, ignore_index=True)
猜你喜欢
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 2013-08-21
  • 2011-10-11
  • 1970-01-01
相关资源
最近更新 更多