当前位置: 首页 > 知识库问答 >
问题:

我需要在一个有数百万行的表上执行一个“昂贵的”循环。我应该使用什么技术(编程语言或其他东西)?

别开诚
2023-03-14

这个问题是这个问题的后续问题:如何提高Python循环的性能?。

基本上,我有一个脚本,作为输入几个csv文件和一些数据处理后,它输出2个csv文件。在这个脚本中,一个表上有一个约1400万行的循环,其目标是创建另一个具有相同行数的表。我在这个项目上使用Python,但是循环太慢了(我知道这一点,因为我使用TQM包来测量速度)。

因此,我正在寻找关于我应该使用什么来实现我的目标的建议。理想情况下,这项技术是免费的,不需要很长时间就能学会。我已经从其他人那里得到了一些建议:Cython和Power BI。最后一个是付费的,第一个看起来很复杂,但我愿意知道它是否真的有用。

如果需要更多的细节,请询问。谢谢

共有3个答案

席安康
2023-03-14

使用python可以实现1400万行,但使用低效的循环方法是无法实现的。我浏览了一下您在这里发布的代码,发现您正在使用iterrows()iterrows()适用于小数据帧,但是(如您所知)在与您的数据帧大小相同的数据帧上使用时,速度非常慢。相反,我建议您首先研究apply()方法(请参阅此处的文档)。那会让你跟上进度的!

严亦
2023-03-14

如果你愿意继续使用python,我可能会推荐使用多重处理模块。科里·斯查费有一个关于它如何在这里工作的好教程。

多处理有点像线程,但是它使用多个解释器来完成主要任务,不像线程模块那样通过每个线程切换以独立执行一行代码。

将工作划分为CPU上有多少个内核,如下所示:

import os
cores = os.cpu_count()

这将通过在整个计算机上分配工作来加速工作负载。

庄实
2023-03-14

阅读关于vaex。Vaex可以帮助您更快地处理数据。你应该首先转换你的csv文件到hdf5格式使用vaex库。

Vaex将为您的操作执行多重处理。

还要检查是否可以将计算矢量化(可能可以)。我看了一下你的密码。尽量避免使用list,如果可以的话,使用numpy数组。

 类似资料:
  • 我想写一个计算长除法问题总进位的代码。这是我为carries编写的函数。我相信问题在于,第一个while循环并没有一直运行。如果是,为什么?这是在Python 3.5中实现的。

  • 假设我们正在使用这个类: 现在我们有了一个学生名单,我们被问到了一些问题,比如: 筛选姓名为“Jonh”的人并得到平均年龄 过滤那些名字是“玛丽”的人并获得最大的高度 过滤那些名字是“ben”的人,得到最小的权重 我认为一个干净易懂的解决方案是使用lambdas按名称过滤并得到所要求的内容: 我想它至少要在列表上迭代3次,使用带有条件的单个循环可能更有效: 我认为第一种方法更干净,但第二种更快。我

  • 问题内容: 有没有办法知道在Java中执行一个循环要花多少秒? 例如: 它不必精确到100%,而只是想知道要花费多长时间。里面的算法是一种写入.txt文件的密钥生成器。我希望它花费几分钟,因此对于我的第一次测试,我想计算秒数。 问题答案: 用Java编写微基准测试时需要非常小心。例如: 如果JIT编译器可以弄清楚循环体不影响代码结果,则可以对其进行优化。例如: 可能很快就会“运行”。 JIT编译后

  • 问题内容: 我的Python程序中有一个保存函数,如下所示: 在此,n为“ 1”。 我收到如下错误: 在外壳中执行相同的加载后,我没有收到任何错误: 为什么会有问题? 问题答案: 您可能从os模块导入了星号: 因此您使用了错误的打开功能。(我想您可以简单地完成,但是可能性较小。)通常,应避免这种导入样式,在实际情况下应避免使用。

  • 我目前有2个pthread正在运行,我想等待其中一个结束,以便我的程序继续运行。 在我的pthreads中,我有一个可以为真或假的变量(它是一个全局变量)。创建线程后(一个在cin中请求输入,一个等待10秒,如果达到10秒,它会杀死“cin”线程并结束自己,如果检测到cin,“cin”线程会杀死“计时器”线程),我希望我的程序等待。当每个线程结束时,它们将变量“stoptimer”置为真。 首先,

  • 我发现这样的php代码: 我希望这个循环会执行4次,因为$I变成了对$的引用(对吗?)。然而,循环只执行一次,并输出: a=10,i=10 我不明白为什么它会这样工作。有什么想法吗?