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

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

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

示例数据如下所示: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...

然后我把lon/lat合在一起:

^{pr2}$

然后我要计算每对位置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行数据上执行!:(我有Windows10双核16gb内存。。。这不算多,但7个小时绝对不行:(

如何使程序更有效地运行?我想的一个方法是,由于数据和它的计算是相互独立的,所以我可以利用并行处理。在

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

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

示例帖子读入:

还有很多不在stackoverflow上的。。。。


版权声明:本文为weixin_30128191原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。