如何在Python中将for循环转换为并行处理?

2023-11-21

我仍处于学习 Python 的早期阶段。如果这个问题听起来很愚蠢,请提前道歉。

我有这组数据(以表格格式),我想向其中添加一些计算列。基本上我有一些位置经度/纬度和目的地经度/纬度,以及各自的数据时间,并且我正在计算每对之间的平均速度。

示例数据如下所示:

print(data_all.head(3))

   id    lon_evnt   lat_evnt          event_time  \
0   1 -179.942833  41.012467 2017-12-13 21:17:54   
1   2 -177.552817  41.416400 2017-12-14 03:16:00   
2   3 -175.096567  41.403650 2017-12-14 09:14:06   

  dest_data_generate_time   lat_dest    lon_dest  \
0 2017-12-13 22:33:37.980  37.798599 -121.292193   
1 2017-12-14 04:33:44.393  37.798599 -121.292193   
2 2017-12-14 10:33:51.629  37.798599 -121.292193  

                             address_fields_dest  \
0  {'address': 'Nestle Way', 'city': 'Lathrop...      
1  {'address': 'Nestle Way', 'city': 'Lathrop...      
2  {'address': 'Nestle Way', 'city': 'Lathrop...      

然后我将经度/纬度压缩在一起:

data_all['ping_location'] = list(zip(data_all.lon_evnt, data_all.lat_evnt))
data_all['destination'] = list(zip(data_all.lon_dest, data_all.lat_dest))

然后我想计算每对位置 ping 之间的距离,并从字符串中获取一些地址信息(基本上采用子字符串),然后计算速度:

 for idx, row in data_all.iterrows():
    dist = gcd.dist(row['destination'], row['ping_location'])
    data_all.loc[idx, 'gc_distance'] = dist

    temp_idx = str(row['address_fields_dest']).find(":")
    pos_start = temp_idx + 3
    pos_end = str(row['address_fields_dest']).find(",") - 2

    data_all.loc[idx, 'destination address'] = str(row['address_fields_dest'])[pos_start:pos_end]

    ##### calculate velocity which is: v = d/t
    ## time is the difference btwn destination time and the ping creation time
    timediff = abs(row['dest_data_generate_time'] - row['event_time'])
    data_all.loc[idx, 'velocity km/hr'] = 0

    ## check if the time dif btwn destination and event ping is more than a minute long
    if timediff > datetime.timedelta(minutes=1):
        data_all.loc[idx, 'velocity km/hr'] = dist / timediff.total_seconds() * 3600.0

好吧,这个程序花了我将近 7 个小时来执行 333k ​​行数据! :( 我有 windows 10 2 核 16gb 内存...虽然不多,但 7 小时绝对不行:(

怎样才能让程序运行得更有效率呢?我想到的一种方式是,由于数据及其计算彼此独立,因此我可以利用并行处理。

我读过很多帖子,但似乎大多数提出的并行处理方法都是针对我只使用一个简单函数的情况;但在这里我添加了多个新列。

非常感谢任何帮助!或者告诉我不可能让 pandas 进行并行处理(我相信我在某处读到过这样的说法,但我不完全确定它是否 100% 正确)。

示例帖子读入:

大熊猫数据框并行处理

python pandas数据框到字典

如何并行化一个简单的 Python 循环?

如何在Python中进行并行编程

还有很多 stackoverflow 上没有的内容......

https://medium.com/@ageitgey/quick-tip-speed-up-your-python-data-processing-scripts-with-process-pools-cf275350163a

https://homes.cs.washington.edu/~jmschr/lectures/Parallel_Processing_in_Python.html


这是一个快速解决方案 - 我根本没有尝试优化您的代码,只是将其输入到多处理池中。这将分别在每一行上运行您的函数,返回具有新属性的行,并从此输出创建一个新的数据帧。

import multiprocessing as mp
pool = mp.Pool(processes=mp.cpu_count())

def func( arg ):
    idx,row = arg

    dist = gcd.dist(row['destination'], row['ping_location'])
    row['gc_distance'] = dist

    temp_idx = str(row['address_fields_dest']).find(":")
    pos_start = temp_idx + 3
    pos_end = str(row['address_fields_dest']).find(",") - 2

    row['destination address'] = str(row['address_fields_dest'])[pos_start:pos_end]

    ##### calculate velocity which is: v = d/t
    ## time is the difference btwn destination time and the ping creation time
    timediff = abs(row['dest_data_generate_time'] - row['event_time'])
    row['velocity km/hr'] = 0

    ## check if the time dif btwn destination and event ping is more than a minute long
    if timediff > datetime.timedelta(minutes=1):
       row['velocity km/hr'] = dist / timediff.total_seconds() * 3600.0

    return row

new_rows = pool.map( func, [(idx,row) for idx,row in data_all.iterrows()])
data_all_new = pd.concat( new_rows )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中将for循环转换为并行处理? 的相关文章

  • DataFrame 在函数内部修改

    我面临一个我以前从未观察到的函数内数据帧修改的问题 有没有一种方法可以处理这个问题 以便初始数据帧不被修改 def test df df tt np nan return df dff pd DataFrame data 现在 当我打印时d
  • KFold 和 ShuffleSplit CV 有什么区别?

    看起来 KFold 每次迭代对象时都会生成相同的值 而 Shuffle Split 每次都会生成不同的索引 它是否正确 如果是这样 其中一个相对于另一个有什么用处 cv cross validation KFold 10 n folds 2
  • Python 在 chroot 中运行时出现错误

    我尝试在 chroot 中运行一些 Python 程序 但出现以下错误 Could not find platform independent libraries
  • 为什么 tkinter / window.update 在我的程序中随着时间的推移变得更慢?

    我发现当我调用 window update 时 当向窗口写入的内容较少时 它的运行速度会更快 但后来 当我向窗口写入更多元素时 window update 需要更长的时间 请参阅下面的我的代码 您可以看到它在更新窗口之前一次向屏幕 100
  • Python sqlite3游标没有属性commit

    当我运行这段代码时 path Scripts wallpapers single png conn sqlite3 connect Users Heaven Library Application Support Dock desktopp
  • html 解析器 python

    我正在尝试解析一个网站 我正在使用 HTMLParser 模块 问题是我想解析第一个 a href 评论后 但我真的不知道该怎么做 所以我在文档中发现有一个函数叫做handle comment 但我还没有找到如何正确使用它 我有以下内容 i
  • 如何在 ReportLab 段落中插入回车符?

    有没有办法在 ReportLab 的段落中插入回车符 我试图将 n 连接到我的段落字符串 但这不起作用 Title Paragraph Title n Page myStyle 我想要这样做 因为我将名称放入单元格中 并且想要控制单元格中的
  • 如何从 Python 中指定运行程序的输入文件?

    我正在编写一个外部脚本 以通过笔记本电脑上的 Python mrjob 模块 而不是在 Amazon Elastic Compute Cloud 或任何大型集群上 运行 mapreduce 作业 我读自mrjob文档 http packag
  • RuntimeError: 预期所有张量都在同一设备上,但发​​现至少有两个设备,cpu 和 cuda:0!使用我的模型进行预测时

    我使用变压器训练了一个序列分类模型 BertForSequenceClassification 我收到错误 预计所有张量都在同一设备上 但发 现至少有两个设备 cpu 和 cuda 0 在方法wrapper index select中检查参
  • Python 视频框架

    我正在寻找一个 Python 框架 它将使我能够播放视频并在该视频上绘图 用于标记目的 我尝试过 Pyglet 但这似乎效果不是特别好 在现有视频上绘图时 会出现闪烁 即使使用双缓冲和所有这些好东西 而且似乎没有办法在每帧回调期间获取视频中
  • 如何在 Python 中从 HTML 页面中提取 URL [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我必须用Python 编写一个网络爬
  • 为什么“return self”返回 None ? [复制]

    这个问题在这里已经有答案了 我正在尝试获取链的顶部节点getTopParent 当我打印出来时self name 它确实打印出了父实例的名称 然而 当我回来时self 它返回 None 为什么是这样 class A def init sel
  • 从 IMDbPy 结果中的片目中获取电影 ID

    我正在尝试创建一个数据集 允许我根据 Python IMDb API 中的演员 ID 和电影 ID 加入演员和电影 现在 我正在尝试从演员的电影作品中提取电影 ID 列表 但无法做到 例如 我知道 Rodney Dangerfield 在
  • Spark中的count和collect函数抛出IllegalArgumentException

    当我使用时抛出此异常时 我尝试在本地 Spark 上加载一个小数据集count 在 PySpark 中 take 似乎有效 我试图搜索这个问题 但没有找到原因 看来RDD的分区有问题 有任何想法吗 先感谢您 sc stop sc Spark
  • 如何在C++中列出Python模块的所有函数名称?

    我有一个 C 程序 我想导入一个 Python 模块并列出该模块中的所有函数名称 我该怎么做 我使用以下代码从模块中获取字典 PyDictObject pDict PyDictObject PyModule GetDict pModule
  • Django 接受 AM/PM 作为表单输入

    我试图弄清楚如何使用 DateTime 字段在 Django 中接受 am pm 作为时间格式 但我遇到了一些麻烦 我尝试在 forms py 文件中这样设置 pickup date time from DateTimeField inpu
  • 如何设置 matplotlib 表中列的背景颜色

    我在一个目录中有多个 txt 文件 例如 d memdump 0 txt 1 txt 10 txt 示例文本文件如下 Applications Memory Usage kB Uptime 7857410 Realtime 7857410
  • 如何正确消除字典中的元素直到只剩下一个字符串

    我真的需要这方面的帮助 def get winner dict winner new dict for winner in dict winner first letter winner 0 value dict winner winner
  • 如何使用Featuretools按列值从单个数据框中的多个列创建特征?

    我正在尝试根据之前的结果来预测足球比赛的结果 我在 Windows 上运行 Python 3 6 并使用 Featuretools 0 4 1 假设我有以下代表结果历史记录的数据框 原始数据框 https i stack imgur com
  • 在游戏中实现功能

    我在完成这部分作业时遇到了麻烦 我必须宣布游戏的获胜者 然后输入到函数中 输入所有 if 语句后 我必须创建一个函数def playGame 这必须包括 showRules user getUserChoice computer getCo

随机推荐

  • php获取唯一子数组[重复]

    这个问题在这里已经有答案了 我想在 PHP 中获得一个解决方案 以获取基于子数组基础的唯一数组 像这样 Array 0 gt Array 0 gt 1227 1 gt 146 2 gt 1 3 gt 39 1 gt Array 0 gt 1
  • 使用文本溢出:省略号;仅当达到 div 中的 3 行时[重复]

    这个问题在这里已经有答案了 这是我的 css 片段 test width 150px height 60px white space nowrap overflow hidden text overflow ellipsis o text
  • bouncycastle 连接到 android studio

    一天中的好时光 我需要以某种方式将 bouncycastle 库连接到 android studio 如何才能做到这一点 我以前从未处理过 这是我需要这个库的代码 Security addProvider new org bouncycas
  • 从 ArrayAdapter 获取FragmentManager

    我有一个由自定义 ArrayAdapter 填充的 listView 每个视图中都有一个按钮 我想在单击按钮时更改当前片段 这是我的代码 public class CheckInSArrayAdapter extends ArrayAdap
  • 求列表中向量的平均值

    我有一个 Vector3 列表 每个都有 x y z 值 List
  • 为什么两个不同对象上的哈希函数返回相同的值?

    我使用Spyder 运行Python 2 7 刚刚发现有趣的事情 hash 1 和hash 2 都返回 2 有问题吗 我认为不同对象上的哈希函数应该返回不同的值 我读过以前的文章 说 1 在 Python 中被保留为错误 hash s 返回
  • C# 支持返回类型协方差吗?

    我正在使用 NET 框架 我真的希望能够制作我的所有网站都使用的自定义类型的页面 当我尝试从控件访问页面时 问题就出现了 我希望能够返回特定类型的页面而不是默认页面 有什么办法可以做到这一点吗 public class MyPage Pag
  • 如何使用 PHP 在 heroku 上发送电子邮件?

    我已经创建了 PHP 应用程序并使用 heroku 进行了部署 在应用程序中 我有联系表格可以将邮件发送到我的 Gmail 帐户 为了实现这一点 我编写了以下 PHP 代码
  • 3 下拉菜单根据另一个[级联下拉菜单]中的选择进行填充

    我是 Java 脚本新手 这里我有 2 个下拉菜单的工作示例Fiddle HTML
  • 在 Yii gridview 分页中保留复选框值

    我有一个 gridview 其中包含一个复选框列 并且还使用分页 当我选中第一页中的某些复选框并导航到第二页并选中第二页中的另一个复选框时 我在第一页中选中的选项不会保留在那里 分页期间是否可以保留复选框值 Gridview 的代码是 wi
  • 在 ASP.NET 中使用 Ext JS [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我没有 JavaScrip
  • 使用 Python 将国际字符替换为基本拉丁字符的好方法是什么?

    说我有绳子 bl t tr b t 其中有几个a and o上面有变音符号和圆环 我希望它成为 blot trabat 尽可能简单 我做了一些挖掘并发现了以下方法 import unicodedata unicode string unic
  • React propType 无法读取未定义的属性

    使用 propTypes 验证 props 会出现以下错误 类型错误 无法读取未定义的属性 字符串 类型错误 无法读取未定义的属性 func 有问题的代码位于代码片段的底部 import React from react import Pr
  • 如何将 Google 地图地点库的自动填充功能限制为仅建议一个城市的地点?

    我目前正在使用给定的代码 但这仅将建议限制在一个国家 地区 我见过一种实现 但它使用 jQuery 我想在不使用 jQuery 的情况下实现它 var input document getElementById searchTextFiel
  • 如何在不在 @INC 的目录中“使用”Perl 模块?

    我的脚本的父目录中有一个模块 我想 使用 它 If I do use Foo pm 我收到语法错误 我尝试这样做 push INC use EPMS 并且 显然没有出现在 INC中 我要疯了 这是怎么回事 use发生在编译时 所以这可以工作
  • 单个 Django 模型,多个表?

    我知道以前曾问过这个完全相同的问题 但我希望得到一个 更好 的答案 不涉及在运行时修改类属性 这是问题 单个 Django 模型 多个表 我有同样的问题 我正在寻找类似于响应者的第一个回复的解决方案 但这实际上有效 如果没有更好的解决方案
  • 如何在服务器端安排PHP脚本的执行?

    我需要一个在特定时间自动执行的 PHP 脚本 我将如何实现这个目标 如果您运行的是 Linux Unix 包括 Mac OSX 创建一个 cron 作业 如果您运行的是 Windows 创建计划任务 Note 上述两个链接都专门针对 PHP
  • std::sort 类中的比较函数无法编译

    我正在编写一个程序来获得凸包 我需要按极角对点进行排序 我选择了base之前指出 所以我编写了一个成员比较函数 请注意 对于每个对象base点不同 但是当我将它应用到std sort 程序无法编译 这是我的程序 class ConvexHu
  • 翻译自定义 jQuery 验证消息

    我有一个关于 jQuery 验证的问题要问plugin 我已使用本地化来更改以西班牙语显示的错误消息的默认语言 但我找不到有关要翻译的自定义消息的任何内容 有什么线索吗 例如 我已经包含了西班牙语的翻译文件 这是我的代码 signup fo
  • 如何在Python中将for循环转换为并行处理?

    我仍处于学习 Python 的早期阶段 如果这个问题听起来很愚蠢 请提前道歉 我有这组数据 以表格格式 我想向其中添加一些计算列 基本上我有一些位置经度 纬度和目的地经度 纬度 以及各自的数据时间 并且我正在计算每对之间的平均速度 示例数据