[英]Can I use Python multiprocessing to get this to run faster on windows
我很难理解如何利用/学习如何在我的Python代码中使用多重处理。 我现在正在处理在Windows OS上具有数个演出和数千万条记录的csv文件,并且开始遇到巨大的处理速度障碍。 我有以下代码:
import numpy as np
import pandas as pd
import datetime as dt
df = pd.read_csv(r'C:...\2017_import.csv')
df['FinalActualDate'] = pd.to_datetime(df['FinalActualDate'])
df['StartDate'] = pd.to_datetime(df['StartDate'])
df['DaysToInHome'] = (df['FinalActualDate'] - df['StartDate']).abs() / np.timedelta64(1, 'D')
df.to_csv(r'C:...\2017_output4.csv', index=False)
数据存档为3.6 gig。 数据如下:
Class,OwnerCode,Vendor,Campaign,Cycle,Channel,Product,Week,FinalActualDate,State,StartDate
3,ECM,VendorA,000206,06-17,A,ProductB,Initial,2017-06-14 02:01:00,NE,06-01-17 12:00:00
3,ECM,VendorB,000106,06-17,A,ProductA,Initial,2017-06-14 00:15:00,NY,06-01-17 12:00:00
3,ECM,AID,ED-17-0002-06,06-17,B,ProductB,Secondary,2017-06-13 20:30:00,MA,06-08-17 12:00:00
3,ECM,AID,ED-17-0002-06,06-17,C,ProductA,Third,2017-06-15 02:13:00,NE,06-15-17 12:00:00
该代码适用于小型数据集,但要处理实际的大型数据集需要花费几个小时。 我已经尝试了几次并发的并发和多处理的迭代,但是都没有成功。 我很迷茫,不值得我发表我的尝试。 我的确意识到其他因素会影响速度,但是获取新硬件不是一种选择。 任何指导将不胜感激。
在进行multiprocessing
之前,我会考虑处理一些低挂的水果(无论您要做什么):
考虑:
In [15]: df
Out[15]:
Class OwnerCode Vendor Campaign Cycle Channel Product \
0 3 ECM VendorA 000206 06-17 A ProductB
1 3 ECM VendorB 000106 06-17 A ProductA
2 3 ECM AID ED-17-0002-06 06-17 B ProductB
3 3 ECM AID ED-17-0002-06 06-17 C ProductA
Week FinalActualDate State StartDate
0 Initial 2017-06-14 02:01:00 NE 06-01-17 12:00:00
1 Initial 2017-06-14 00:15:00 NY 06-01-17 12:00:00
2 Secondary 2017-06-13 20:30:00 MA 06-08-17 12:00:00
3 Third 2017-06-15 02:13:00 NE 06-15-17 12:00:00
由于您的日期时间格式是常规格式,因此只需传递format
参数即可。 做一个简单的测试:
In [16]: dates = df.StartDate.repeat(10000)
In [17]: len(dates)
Out[17]: 40000
In [18]: %timeit pd.to_datetime(df.StartDate)
1000 loops, best of 3: 866 µs per loop
In [19]: %timeit pd.to_datetime(df.StartDate, format="%m-%d-%y %H:%M:%S")
10000 loops, best of 3: 106 µs per loop
我的速度提高了8倍。 除非您使用8个以上的内核,否则这将比并行化要快得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.