我可以使用Python多处理让它在windows上运行得更快吗

2024-10-03 15:34:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难理解如何利用/学习如何在Python代码中使用多处理。我现在正在处理csv文件,这些文件在windows操作系统上有几个gig和数千万条记录,并且开始遇到巨大的处理速度障碍。我有以下代码:

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千兆字节。数据如下所示:

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

这段代码适用于小数据集,但在实际的大数据集上需要几个小时。我已经尝试了导入的多次迭代期货多次处理都没有成功。我太迷茫了,不值得我把我试过的东西贴出来。我确实意识到其他因素会影响速度,但获得新的硬件不是一个选择。任何指导都将不胜感激。你知道吗


Tags: 文件csvto数据代码importdfdatetime
1条回答
网友
1楼 · 发布于 2024-10-03 15:34:31

在你进入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个,否则这比并行化要快得多。你知道吗

相关问题 更多 >