Я пытаюсь обработать набор данных для целей слияния.До слияния были некоторые процессы.так как у меня есть отдельный столбец даты и времени вместе со вторичным комбинированным столбцом даты и времени, который я должен сопоставить самое близкое время между этим обоим набором даты и времени, используя merge_asof.До этого мне потребуется записать 1-ую и последнюю отметку времени 1-го набора даты и времени для использования в качестве границы времени для 2-го набора данных.Чтобы достичь этого, я преобразовал дату и время в метку времени Unix для сравнения.Поскольку 2 набора даты и времени не имеют одинакового количества значений (например, 1-й набор даты и времени содержит данные до 20 строк, в то время как 2-й набор даты и времени имеет до 50 строк).Мне удается только сократить дату и время 2-го набора до 20-й строки, поскольку нет даты и времени для 1-го набора данных в 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
После обработки он успешно ограничивает временной интервал 1-й и последней датой времени, используя код ниже
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