pandas date_range не исключает праздничные дни

#python #pandas #date-range

Вопрос:

Я пытался исключить набор дат из моего результата pandas bdate_range, но по какой-то причине они продолжают появляться.

Я следил за записями здесь https://pandas.pydata.org/docs/reference/api/pandas.bdate_range.html, т. е. примените bdate_range, а также freq=’C’ . Я думал, что мое исключение из списка было настроено неправильно, но я не вижу никаких ошибок при запуске скрипта.

Пример кода приведен ниже. Кто-нибудь может увидеть, что я сделал не так? предпочел бы, чтобы bdate_range работал вместо того, чтобы использовать какой-то обходной путь

 import pandas as pd  
import datetime

exclude = [pd.datetime(2020, 1, 7), pd.datetime(2020, 1, 27)]

pd.bdate_range('2020/1/1','2020/1/31',freq='C',  holidays=exclude, )
 

Результат по-прежнему включает 7-е и 27-е число, которые я пытаюсь исключить

 DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-06',
               '2020-01-07', '2020-01-08', '2020-01-09', '2020-01-10',
               '2020-01-13', '2020-01-14', '2020-01-15', '2020-01-16',
               '2020-01-17', '2020-01-20', '2020-01-21', '2020-01-22',
               '2020-01-23', '2020-01-24', '2020-01-27', '2020-01-28',
               '2020-01-29', '2020-01-30', '2020-01-31'],
              dtype='datetime64[ns]', freq='C')
 

скриншот результата

Также попробовал использовать с даты и времени, как было предложено, но тот же результат

использование с даты и времени

Комментарии:

1. Я получаю предупреждение о дате и времени, но в моей среде pandas1.2.5 среда Colab pandas1.1.5 и последняя версия 1.3.3 не показывают 7-е и 27-е числа. Какую версию вы используете?

2. спасибо, я только что посмотрел, и у меня есть более старая версия панд. обновится до последней версии и посмотрит, работает ли она

3. только что удалось обновить пакет, и теперь все работает. Спасибо

Ответ №1:

Вы уверены, что выполняете то же самое, чем делитесь с нами здесь? Я только что запустил ваш код, и, похоже, он исключает даты, которые вы упоминаете:

 DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-06',
               '2020-01-08', '2020-01-09', '2020-01-10', '2020-01-13',
               '2020-01-14', '2020-01-15', '2020-01-16', '2020-01-17',
               '2020-01-20', '2020-01-21', '2020-01-22', '2020-01-23',
               '2020-01-24', '2020-01-28', '2020-01-29', '2020-01-30',
               '2020-01-31'],
              dtype='datetime64[ns]', freq='C')
 

В случае, если вы получите предупреждение об устаревании, не используйте pd.datetime , а импортируйте его из собственной библиотеки, используя from datetime import datetime .

Комментарии:

1. да, я запускаю его через jupyter/ python 3. отредактировал вопрос, чтобы показать скриншот моего вывода

Ответ №2:

Вместо
import datetime
делать
from datetime import datetime
и вместо
exclude = [pd.datetime(2020, 1, 7), pd.datetime(2020, 1, 27)]
делать
exclude = [datetime(2020, 1, 7), datetime(2020, 1, 27)]

Комментарии:

1. спасибо, попробовал и это, но результат тот же. обновил свой вопрос, чтобы отразить то же самое

2. Скорее всего, у вас устаревшая версия pandas. Я использую версию 1.1.5 (colab), и, похоже, она работает.

3. спасибо, мне нужно было обновить библиотеку, а также изменить код, как вы показали выше, чтобы он работал на моей стороне