2015-06-29 2 views
0

У меня есть кадр данных, где я пытаюсь отфильтровать значения, где значение в столбце даты находится между StartDate и FinishDate. Для этого я создаю столбцы с pandas.to_datetime из строковых значений для этих дат, а затем фильтрует на основе этого.Сравнение Pandas DateTime не дает точных результатов

result['date'] = pd.to_datetime(result.DateCreated) 
    result['StartDate'] = pd.to_datetime(result.StartDate) 
    result['FinishDate'] = pd.to_datetime(result.FinishDate) 
    result = result[(result.date >= result.StartDate) & 
        (result.date <= result.FinishDate)] 

Частичная часть данных используются ниже, StartDate и FinishDates слева то, что эти значения после кода выше, и те, на праве начальных значений я включен в случае, если произошло вопрос в to_datetime

,date,StartDate,FinishDate,startboundry,finishboundry,DateCreated,StartDate,FinishDate 
0,2009-06-08,2009-05-01,2009-06-30,False,True,2009-06-08 00:00:00,2009-05-01,2009-06-30 
1,2009-10-08,2009-08-01,2009-12-31,False,True,2009-10-08 00:00:00,2009-08-01,2009-12-31 
2,2010-01-28,2010-01-01,2010-04-30,False,True,2010-01-28 00:00:00,2010-01-01,2010-04-30 
3,2010-05-27,2010-05-01,2010-06-30,False,True,2010-05-27 00:00:00,2010-05-01,2010-06-30 
4,2010-09-22,2010-08-01,2010-12-31,False,True,2010-09-22 00:00:00,2010-08-01,2010-12-31 
5,2011-01-13,2011-01-01,2011-04-30,False,True,2011-01-13 00:00:00,2011-01-01,2011-04-30 
6,2011-05-26,2011-05-01,2011-06-30,False,True,2011-05-26 00:00:00,2011-05-01,2011-06-30 
7,2009-01-20,2009-01-01,2009-04-30,False,True,2009-01-20 00:00:00,2009-01-01,2009-04-30 
8,2009-05-11,2009-05-01,2009-06-30,False,True,2009-05-11 00:00:00,2009-05-01,2009-06-30 
9,2009-10-05,2009-08-01,2009-12-31,False,True,2009-10-05 00:00:00,2009-08-01,2009-12-31 

Некоторые из них читают начальное условие (result.date >= result.StartDate), как False, даже если они явно верно.

2009-06-08 после 2009-05-01, например, как во времени, так и лексически, если он просто выполнял сравнение строк.

Отредактированные, чтобы добавить некоторую информацию управления версиями: в процессе убедившись, что версии питона панд и т.д. были такая же, собранная информация версии поделиться в том случае, помогает здесь:

панде версия 0.16.2 питона версия 2.7.9 IPython 3.2.0

+1

Является ли это нарочно у вас есть столбцы «StartDate» и «FinishDate» дважды ? – joris

+0

да, второй 2 являются исходными значениями перед pd.to_dateframe, которые я включил здесь, если они предоставили некоторое представление. – lathomas64

ответ

0

для фильтрации dataframe вы можете использовать между

df[df.date1.between(date2,date3)] 
+0

Можете ли вы объяснить больше своего ответа, пожалуйста? – Zulu

+0

это будет только дата2, дата3 или df.date2, df.date3? все даты являются строками в базе данных не только date1 – lathomas64

+0

Это дает те же результаты, но полезно иметь более оптимизированную версию фильтра – lathomas64

Смежные вопросы