Pandas: Выбрать все данные из Pandas ДатаФрейм между двумя датами. - PullRequest
5 голосов
/ 28 февраля 2020

У меня есть DataFrame, в котором есть столбец с датами событий (даты не являются уникальными). Мне нужно выбрать все данные, которые есть в этот период. Я пытаюсь следующее:

start_day = datetime.date(datetime.strptime(start_day, '%d.%m.%Y')) #change user data to date format

end_day = datetime.date(datetime.strptime(end_day, '%d.%m.%Y'))

df = df[df['Transaction_date'].between(start_day, end_day)]

Тип столбца Transaction_date равен datetime64[ns]. Когда я запускаю код с запросом на период от 01/01/2020 до 31/01/2020 - часть данных за указанный период теряется (информация отображается только за 21 день, она должна быть за 31 день).

Я вижу, что фрейм данных содержит данные за весь запрошенный период. Можете ли вы помочь мне, пожалуйста, где моя ошибка?

1 Ответ

3 голосов
/ 28 февраля 2020

Я использовал следующий тестовый фрейм данных:

   Transaction_date  Value
0        2019-12-31     10
1        2020-01-10     10
2        2020-01-15     10
3        2020-01-20     10
4        2020-01-25     10
5        2020-01-28     10
6        2020-01-29     10
7        2020-01-30     10
8        2020-01-31     10
9        2020-02-01     10
10       2020-02-01     10

Даты начала / окончания:

start_day = '01.01.2020'
end_day = '31.01.2020'

Код:

# Convert start / end dates to datetime
start_day = pd.to_datetime(start_day)
end_day = pd.to_datetime(end_day)

Я заметил, что Вы используете модуль datetime , что я считаю плохой практикой. Для этого используйте специальную функцию pandasoni c ( to_datetime ). Он даже достаточно умен, чтобы распознавать многие из широко используемых форматов даты, поэтому нет необходимости указывать его самостоятельно.

Чтобы получить реальный результат, выполните:

df[df['Transaction_date'].between(start_day, end_day)]

результат:

  Transaction_date  Value
1       2020-01-10     10
2       2020-01-15     10
3       2020-01-20     10
4       2020-01-25     10
5       2020-01-28     10
6       2020-01-29     10
7       2020-01-30     10
8       2020-01-31     10

Итак, как вы видите:

  • Дата с 2019 исключена.
  • Вывод содержит только январские даты, до самого конца.
  • Даты с начала февраля также были исключены.

Повторите мой пример на вашем компьютере. Может быть, источник вашей проблемы (что результат не содержит все даты января) где-то еще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...