Есть ли способ использовать формат yyyy-mm-w в datetime для печати? - PullRequest
1 голос
/ 14 января 2020

У меня есть некоторые данные, которые наблюдаются и регистрируются по неделям, и я пытаюсь построить эти данные с помощью matplotlib. В настоящее время я использую формат даты yyyymmw, где w обозначает неделю месяца (может принимать любое значение от 1 до 5). Каждая неделя начинается во вторник и заканчивается в понедельник, если в конце / начале месяца эта неделя не разделится на две части.

Мой вопрос: существует ли какой-либо формат datetime, который поддерживает эти типы дат?

Вот пример данных:

+ --------+-------+------+
|   week  | Sugar | Soy  |
+ --------+-------+------+
| 2019121 | 534.3 | 49.1 |
| 2019122 | 423.6 | 45.2 |
+ --------+-------+------+

Ответы [ 2 ]

2 голосов
/ 14 января 2020

Вы можете взглянуть на дату matplotlib тикеры и форматеры .

В сущности, учитывая объект Axes, скажем ax, вы можете установить локатор для оси, а затем форматера. Например, вы можете использовать WeekdayLocator для отметки каждый понедельник и использовать DateFormatter, инстанцированный с "%y-%m-%W", чтобы отображать каждую дату как yyyy-mm-w.

0 голосов
/ 20 января 2020

Небольшое обновление, так как я смог преодолеть это. Как указал @ImportanceOfBeingErnest, не было никакого способа преобразовать этот формат в формат даты и времени. Итак, я преобразовывал каждую неделю в первый день, используя дату и время. Календарь был действительно полезным. Вот мой код:

from datetime import datetime
import calendar
def transform_week_into_days(week): #week example: '2018031'
    week = str(week)
    year = week[:4]
    month = week[4:6]
    week = week[6]
    month_year = year+'-'+month
    calendar = calendar.monthcalendar(int(ano), int(mes))
    week_start = []
    for i in range(len(calendar)):
        for j in range(len(calendar[-1])):
            if calendar[i][j] != 0:
                day = str(month_year)+'-'+str(var[i][j])
                datetime_object = datetime.strptime(day, '%Y-%m-%d')
                if datetime_object.weekday() != 5 and datetime_object.weekday() != 6: #check if the first day of week is saturday or sunday
                    week_start.append(day)
                break
    return week_start[int(week)-1]

Надеюсь, это поможет тем, кто нуждается.

...