Чтение всех данных из каждой строки в процессе обработки данных с использованием Python - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь обработать набор данных для целей слияния.До слияния были некоторые процессы.так как у меня есть отдельный столбец даты и времени вместе со вторичным комбинированным столбцом даты и времени, который я должен сопоставить самое близкое время между этим обоим набором даты и времени, используя 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

1 Ответ

0 голосов
/ 27 декабря 2018

Я решил проблему, разделив данные на 2 разных набора данных, чтобы выполнить процесс с временной границей, а затем выполнил слияние

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'] = ''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...