Не работает сравнение дней недели в Python - как исправить?

pristnikolas

Новичок
Пользователь
Авг 24, 2024
14
1
3
Добрый день, уважаемые программисты. Написал этот код в pycharm, а он не выводится. Отдельный print() выводится, а этот почему-то нет. Скажите пожалуйста, что делать?
Python:
import pandas as pd
import numpy as np
dates = np.array(['2023-07-01', '2023-07-02', '2023-07-03','2023-07-04','2023-07-05','2023-07-06','2023-07-07','2023-07-08','2023-07-09','2023-07-13'])
dates_pd = pd.to_datetime(dates)
days_of_week = dates_pd.day_name()
sales_day = ''
for i in range(len(dates)):
    day = days_of_week[i]
    if day < 'Friday':  # Сравнение дней недели
        sales_day += day + ' '  # Добавление дня к строке с пробелом
print(sales_day.strip())
 

Dr. Mundo

Модератор
Команда форума
Модератор
Фев 13, 2024
17
1
3
Основная ошибка в вашем коде заключается в попытке сравнить строки с днями недели напрямую через day < 'Friday'. Это не будет работать корректно, так как дни недели возвращаются как строки на английском языке, и строковое сравнение не учитывает порядок дней недели.

Вот исправленный вариант кода:

Python:
import pandas as pd
import numpy as np

dates = np.array(['2023-07-01', '2023-07-02', '2023-07-03','2023-07-04','2023-07-05','2023-07-06','2023-07-07','2023-07-08','2023-07-09','2023-07-13'])
dates_pd = pd.to_datetime(dates)
days_of_week = dates_pd.day_name()

# Создаем словарь для определения порядка дней недели
weekday_order = {
    'Monday': 0,
    'Tuesday': 1,
    'Wednesday': 2,
    'Thursday': 3,
    'Friday': 4,
    'Saturday': 5,
    'Sunday': 6
}

sales_day = ''
for i in range(len(dates)):
    day = days_of_week[i]
    if weekday_order[day] < weekday_order['Friday']:  # Сравниваем числовые значения дней
        sales_day += day + ' '

print(sales_day.strip())

Основные изменения:
1. Добавлен словарь `weekday_order`, который присваивает каждому дню недели числовое значение
2. Сравнение теперь происходит по числовым значениям из словаря, а не по строкам

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

Python:
import locale
locale.setlocale(locale.LC_TIME, 'ru_RU.UTF-8')  # для русских названий

перед созданием `days_of_week`.
 

Форум IT Специалистов