Проблемы с фильтром дат (python)

#python #python-3.x #pandas #jupyter-notebook

Вопрос:

У меня есть некоторые проблемы с фильтрацией определенного периода дат из моего фрейма данных.

Например, мне нужны даты между 14/09/2014 — 30/09/2020. Чтобы получить это, я использовал

df = df.loc[(df['date'] >= '14/09/2014') and (df['date'] <= '30/08/2020')] (ошибка значения) , а также

df = df.loc['14/09/2014':'30/08/2020'] —> какой вид работал, но он также показывал даты за пределами определенного диапазона (например, 12.09.1965).

Для получения дополнительной информации: Я настроил столбец даты (‘edate’) в качестве столбца индекса, см. Следующий код:

df = pd.read_csv('https://manifestoproject.wzb.eu/down/data/2020b/datasets/MPDataset_MPDS2020b.csv', parse_dates=['date'], index_col='edate')

Кроме того, я использую dtale для отображения результатов через localhost.

Может ли кто-нибудь, пожалуйста, объяснить, почему он показывает дальнейшие даты за пределами диапазона (при использовании кода с 14/09/2014:30/08/2020)? Кроме того, я был бы более чем благодарен, если бы кто-нибудь мог предложить решение моей проблемы!

С уважением

Ответ №1:

Есть 2 проблемы — для побитового and используется amp; и для сравнения по датам необходим формат YYYY-MM-DD :

 df = df[(df['date'] >= '2014-09-14') amp;(df['date'] <= '2020-08-30')]
 

Сверьтесь с данными:

 #original data
print (len(df))
4656

#only changed and to amp;
df1 = df.loc[(df['date'] >= '14/09/2014') amp; (df['date'] <= '30/08/2020')]
print (len(df1))
4656

# changed and to amp; and format YYYY-MM-DD
df1 = df[(df['date'] >= '2014-09-14') amp;(df['date'] <= '2020-08-30')]
print (len(df1))
585