在python中使用大型csv

时间:2014-10-06 11:17:15

标签: python csv numpy pandas

我在csv文件中有一个大表,它有500万行和4列。 我的目标是从前500k中取出每一行,并根据特定条件将其与所有后续行(即5kk-n)进行比较。条件类似于

row(n).column1 == row(n + 1).column1 AND row(n).column2 == row(n + 1).column2 AND row(n).column3 == row(n + 1 ).column3

OR

row(n).column1 == row(n + 1).column1 AND row(n).column2 == row(n + 1).column2 AND 行(n).column4中的row(n + 1).column4.split()[0]

现在我正在使用简单的循环列表:

for idx,i in enumerate(big[:500000]):
    for jdx,j in enumerate(big):
        if (jdx>idx and i[0]==j[0] and i[1]==j[1] and i[2]==j[2]) or (i[0]==j[0] and i[1]==j[1] and j[3].split()[0] if j[3].split() else '' in i[3]):
            matches.append([idx,jdx])

这显然需要很长时间才能完成(使用单一过程大约需要一周时间)。 Pandas和numpy一次对整个阵列的操作都有好处,但我不知道我是否可以将这个任务转换成它们。

所以问题是,我怎样才能加快进程?

1 个答案:

答案 0 :(得分:0)

我最终使用了以下内容来提高性能。

  1. 函数中的分离循环(增益约为20%)
  2. 改进了逻辑运算。
  3. 使用PyPy解释器(300 +%增加)