我是一个比较python的新手,试图高效地浏览大约800万行的大型csv文件
我有一个6列的csv:
+-------+-------+--------+-------+--------+----------+
| Gene1 | Start | End | Gene2 | Start | End |
+-------+-------+--------+-------+--------+----------+
| gyrA | 33 | 193 | dnaB | 844 | 965 |
| rpoS | 152 | 190 | ldh | 200 | 264 |
| gbpC | 456 | 500 | bgl | 1222 | 14567 |
+-------+-------+--------+-------+--------+----------+
…等等,共8000000行
我想做的是比较Gene2的开始和结束是否在一定范围内+/-Gene1的开始和结束。例如,我想看看Gene1的结尾是否在Gene2开始的20范围内。然后,我想将所有符合此条件的行写入一个新的csv文件
代码: 如果Gene1的结尾在Gene2开头的+/-20范围内,则将整行追加到新文件中
输出:
+-------+-------+--------+-------+-------+--------+
| Gene1 | Start | End | Gene2 | Start | End |
+-------+-------+--------+-------+-------+--------+
| rpoS | 152 | 190 | ldh | 200 | 264 |
+-------+-------+--------+-------+-------+--------+
对于python新手来说,最有效的方法是什么?我将不得不在多个csv上多次运行代码,因此我担心速度。我尝试过与pandas混在一起,但似乎itterrows()函数不是提高效率的建议方法。我想我可以用csv阅读器很容易地完成这项工作,但我不确定这可能需要多长时间
谢谢你帮我解决这个问题
许多操作是矢量化的。你很难自己快速地写一些更有表现力的东西:
返回布尔级数的条件:
按布尔序列筛选数据帧:
查看Getting Started页面了解更多信息
我们可以使用
chunksize
来使用生成器表达式,一次处理多行并将其写入csv。分块执行此操作可以避免耗尽所有ram另一个选项是使用
Dask
,您可以在上面阅读首先,我们创建一个空白csv,其中包含要写入的目标标题
相关问题 更多 >
编程相关推荐