比较来自2个不同csv文件的日期时间

时间:2018-04-04 18:39:04

标签: python pandas csv

所以我基本上有2个csv文件:

1)Stamps.csv(800行)

[id (int64), start date (datetime64[ns]), end
date (datetime64[ns])] 

2)Data.csv(360 000行)[date time(datetime64[ns])]

Stamps.csv中的所有条目都有唯一的开始日期和结束日期间隔。我将它们加载到2个数据帧中

df=pd.read_csv(Stamps.csv) 
df2=pd.read_csv(Data.csv)

并尝试根据日期时间字段将df2中的条目与df中的条目进行匹配;这样如果df2的“日期时间”值在一个间隔之间,那么从df给它一个id。 现在我试图这样做:

for index2, row2 in df2.iterrows(): #for every entry in the Data.csv
  for index, row in df.iterrows(): #for every entry in Stamp.csv
    if(row['StartDateTime']<=row2['Datetime']<=row['StopDateTime']): #if the date from Data.csv is between 2 intervals from Stamp.csv
        df2['JobRef']=row['JobRef'] #give the id from Stamp.csv to the entry from Data.csv
        break
df.to_csv(path_or_buf=path, sep=';', index=False)

我得到了想要的结果,但是处理需要很长时间(第一次运行需要3个小时)。有没有办法更快地做到这一点?

P.S。我也试过多线程for循环,但它仍然需要很长时间才能执行。

1 个答案:

答案 0 :(得分:0)

结束这样做,感谢chris dorn发布答案:

import pandasql as ps

sqlcode = '''
select df2.*, df.JobRef
from df
inner join df2 
on df2.Datetime between df.StartDateTime and df.StopDateTime
'''
df2 = ps.sqldf(sqlcode,locals())

工作得非常快。