使用python读取数据处理中每一行的所有数据

2024-06-25 06:24:01 发布

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

我正在尝试处理一组数据以进行合并。在合并之前,有一些过程。因为我有一个单独的日期和时间列,还有一个辅助的组合日期时间列,我必须使用merge\u asof匹配这两组日期时间之间最近的时间。在此之前,我将需要捕获第一组datetime的第一个和最后一个时间戳,以用作第二组数据的时间边界。为了实现这一点,我将datetime转换为unix时间戳进行比较。因为这两组datetime的值数目不相等(例如,第一组datetime最多有20行数据,而第二组datetime最多有50行数据)。我只设法将第二组数据的日期时间缩短到第20行,因为第21行以后的第一组数据没有日期时间。你知道吗

数据如下:

Date,Arr,Qdate
7/10/2011,6:05:04,7/10/2011  12:02:57 AM
7/10/2011,6:12:16,7/10/2011  6:09:41 AM
7/10/2011,6:18:00,7/10/2011  6:12:27 AM
7/10/2011,19:34:47,7/10/2011  7:02:04 PM
7/10/2011,19:52:21,7/10/2011  7:29:20 PM
,,7/10/2011  7:34:53 PM
,,7/10/2011  7:41:35 PM
,,7/10/2011  7:52:23 PM
,,7/10/2011  7:58:21 PM
,,7/10/2011  8:01:22 PM

完成处理后,它使用下面的代码成功地将时间范围限制为第一个和最后一个日期时间

mydataset = pd.read_csv(x + ".csv", error_bad_lines=False, engine ='python', index_col= False,header = 0, sep = ",")
mydataset['Date1'] = pd.to_datetime(mydataset['Date'] + ' ' + mydataset['Arr'], format='%d/%m/%Y %H:%M:%S')  
mydataset['Date2'] = pd.to_datetime(mydataset['Qdate'] , format='%d/%m/%Y %I:%M:%S %p', errors='ignore')
mydataset['Date2'] = pd.to_datetime(mydataset['Date2'])
mydataset = mydataset[mydataset['Date1'].notnull()]
mydataset['tsArrTime'] = mydataset['Date1'].apply(lambda x: time.mktime(x.timetuple()))                                     #conversion of unix timestamp
mydataset['tsTTime'] = mydataset['Date2'].apply(lambda x: time.mktime(x.timetuple()) if str(x) != 'NaT' else 0)             #conversion of unix timestamp
minTime = mydataset['tsArrTime'].min()                                                                                      
maxTime = mydataset['tsArrTime'].max() + 60                                                                                 
mydataset.loc[(mydataset['tsTTime'] < minTime) | (mydataset['tsTTime'] > maxTime), 'Qdate'] = ''                           
mydataset.loc[(mydataset['tsTTime'] < minTime) | (mydataset['tsTTime'] > maxTime), 'VID'] = ''                              
mydataset = mydataset.drop(columns=['Date1','Date2','tsArrTime','tsTTime'])

结果是:

Date,Arr,Qdate
7/10/2011,6:05:04,
7/10/2011,6:12:16,7/10/2011  6:09:41 AM
7/10/2011,6:18:00,7/10/2011  6:12:27 AM
7/10/2011,19:34:47,7/10/2011  7:02:04 PM
7/10/2011,19:52:21,7/10/2011  7:29:20 PM

但有一些数据丢失,所以我想实现这一点

Date,Arr,Qdate
7/10/2011,6:05:04,
7/10/2011,6:12:16,7/10/2011  6:09:41 AM
7/10/2011,6:18:00,7/10/2011  6:12:27 AM
7/10/2011,19:34:47,7/10/2011  7:02:04 PM
7/10/2011,19:52:21,7/10/2011  7:29:20 PM
,,7/10/2011  7:34:53 PM
,,7/10/2011  7:41:35 PM
,,7/10/2011  7:52:23 PM

Tags: 数据datetimedate时间unixampdarr
1条回答
网友
1楼 · 发布于 2024-06-25 06:24:01

我已经解决了这个问题,将数据分为两个不同的数据集,进行时间边界处理,然后进行合并

mydataset1 = mydataset[mydataset['Date1'].notnull()]
mydataset2 = mydataset.Date2
print(mydataset1)
print(mydataset2)
tsArrTime = mydataset1.Date1.apply(lambda x: time.mktime(x.timetuple()))                                     #conversion of unix timestamp
tsTTime = mydataset2.apply(lambda x: time.mktime(x.timetuple()))             #conversion of unix timestamp
minTime = tsArrTime.min()                                                                                      
maxTime = tsArrTime.max() + 60                                                                                 
print(tsArrTime)
print(tsTTime)
mydataset.loc[(tsTTime < minTime) | (tsTTime > maxTime), 'Qdate'] = ''                            
mydataset.loc[(tsTTime < minTime) | (tsTTime > maxTime), 'VID'] = ''

相关问题 更多 >